当前位置: 首页 > wzjs >正文

郑州网站建设外贸wordpress 服务器配置

郑州网站建设外贸,wordpress 服务器配置,曹县网站开发公司,网络运营一般工资多少Spring 事务是 Spring 框架中非常重要的特性之一,它为开发者提供了一种简单而强大的方式来管理数据库操作的一致性和完整性。以下从多个方面对 Spring 事务进行详细介绍: 1. 事务的基本概念 在数据库操作中,事务是一组不可分割的操作序列&a…

Spring 事务是 Spring 框架中非常重要的特性之一,它为开发者提供了一种简单而强大的方式来管理数据库操作的一致性和完整性。以下从多个方面对 Spring 事务进行详细介绍:

1. 事务的基本概念

在数据库操作中,事务是一组不可分割的操作序列,这些操作要么全部成功执行,要么全部失败回滚。事务具有四个特性,即 ACID:

  • 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务执行前后,数据库的状态必须保持一致。
  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应该影响其他事务的执行。
  • 持久性(Durability):事务一旦提交,其结果应该永久保存在数据库中。

2. Spring 事务管理的方式

Spring 提供了两种事务管理方式:编程式事务管理和声明式事务管理。

2.1 编程式事务管理
  • 描述:通过编写代码来管理事务的开始、提交和回滚。这种方式比较灵活,但代码侵入性强,会增加代码的复杂度。
  • 示例
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;import javax.sql.DataSource;public class ProgrammaticTransactionExample {private DataSourceTransactionManager transactionManager;public ProgrammaticTransactionExample(DataSource dataSource) {this.transactionManager = new DataSourceTransactionManager(dataSource);}public void performTransaction() {// 创建事务定义TransactionDefinition def = new DefaultTransactionDefinition();// 获取事务状态TransactionStatus status = transactionManager.getTransaction(def);try {// 执行数据库操作// ...// 提交事务transactionManager.commit(status);} catch (Exception e) {// 回滚事务transactionManager.rollback(status);}}
}
2.2 声明式事务管理
  • 描述:通过配置的方式来管理事务,而不需要在代码中显式地编写事务管理代码。这种方式减少了代码的侵入性,提高了代码的可维护性。Spring 支持基于 XML 配置和基于注解的声明式事务管理,其中基于注解的方式更为常用。
  • 示例(基于注解)
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactionalpublic void transferMoney() {// 执行数据库操作// ...}
}

3. 事务的传播行为

事务的传播行为定义了在一个事务方法调用另一个事务方法时,事务应该如何传播。Spring 定义了 7 种传播行为,常用的有以下几种:

  • REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  • REQUIRES_NEW:无论当前是否存在事务,都会创建一个新的事务,并挂起当前事务(如果存在)。
  • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
  • NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起当前事务。
  • MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  • NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
  • NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。

示例:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(propagation = Propagation.REQUIRES_NEW)public void doSomething() {// 执行数据库操作// ...}
}

4. 事务的隔离级别

事务的隔离级别定义了一个事务对其他事务的可见性。Spring 支持以下几种隔离级别,与数据库的隔离级别相对应:

  • DEFAULT:使用数据库默认的隔离级别。
  • READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、不可重复读和幻读问题。
  • READ_COMMITTED:允许读取已经提交的数据,避免了脏读,但可能会出现不可重复读和幻读问题。
  • REPEATABLE_READ:确保在同一个事务中多次读取同一数据的结果是一致的,避免了脏读和不可重复读,但可能会出现幻读问题。
  • SERIALIZABLE:最高的隔离级别,通过强制事务串行执行,避免了脏读、不可重复读和幻读问题,但会降低并发性能。

示例:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(isolation = Isolation.READ_COMMITTED)public void doSomething() {// 执行数据库操作// ...}
}

5. 事务的回滚规则

在默认情况下,Spring 事务只会在抛出 RuntimeException 及其子类时进行回滚。可以通过 @Transactional 注解的 rollbackFornoRollbackFor 属性来指定需要回滚和不需要回滚的异常类型。

示例:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(rollbackFor = Exception.class)public void doSomething() throws Exception {// 执行数据库操作// ...throw new Exception("Something went wrong");}
}

6. 开启 Spring 事务支持

要使用 Spring 声明式事务管理,需要在配置类上添加 @EnableTransactionManagement 注解。

示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;@Configuration
@EnableTransactionManagement
public class AppConfig {@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/test");dataSource.setUsername("root");dataSource.setPassword("password");return dataSource;}
}

综上所述,Spring 事务管理提供了丰富的功能和灵活的配置选项,开发者可以根据具体的业务需求选择合适的事务管理方式、传播行为、隔离级别和回滚规则,确保数据库操作的一致性和完整性。


文章转载自:

http://fxtckZDg.pxwjp.cn
http://k9iMHTd0.pxwjp.cn
http://LAIPW2u3.pxwjp.cn
http://a4QZPFgL.pxwjp.cn
http://bCaKiSQr.pxwjp.cn
http://yzIR2XjG.pxwjp.cn
http://uVA7orcI.pxwjp.cn
http://CCFtWCqE.pxwjp.cn
http://VFRDA2AH.pxwjp.cn
http://KnbHvkbs.pxwjp.cn
http://BxPGMsSJ.pxwjp.cn
http://aobtVamv.pxwjp.cn
http://MwRYuyyb.pxwjp.cn
http://EC3WZCfl.pxwjp.cn
http://3zKlFesm.pxwjp.cn
http://PH9VxsGK.pxwjp.cn
http://gt3Y3sMk.pxwjp.cn
http://61YNPZhK.pxwjp.cn
http://2Shl5Irh.pxwjp.cn
http://a0Tew30G.pxwjp.cn
http://AzhV4oby.pxwjp.cn
http://ee8bJv38.pxwjp.cn
http://GLgWJK5v.pxwjp.cn
http://uoY2y1rP.pxwjp.cn
http://rLuLel2U.pxwjp.cn
http://rObxZQSO.pxwjp.cn
http://I7NaOhrJ.pxwjp.cn
http://LZwAyi6a.pxwjp.cn
http://p1feu6OJ.pxwjp.cn
http://ddY2ogWk.pxwjp.cn
http://www.dtcms.com/wzjs/732253.html

相关文章:

  • 建设网站的服务费是指什么如何建立一个好的网站
  • 建设银行网上流览网站截图域名网站.
  • 自己做的网站页面错误深圳网站建设托管
  • 手机端视频网站模板哈尔滨网站建设推广公司
  • 优秀的版式设计网站小程序第三方平台免费
  • 珠海做网站开发闲鱼上面给人做网站造退款
  • 旅游攻略网站开发背景软件工程师主要做什么
  • 用什么软件上传网站一般vs做的网站的总体框架
  • 上海电子商务网站建设延安网站建设哪家专业
  • 温州网上推广什么网站好wordpress 仿手机商城
  • 如何在vs做网站wordpress效果
  • iis做网站软文广告图片
  • 麻章手机网站建设公司文员短期电脑培训
  • 广州网站推广哪家强广告设计公司核心优势
  • 做网站ie10缓存软件项目管理是做什么
  • 常德公交网站柳市网站优化
  • wordpress 音乐站主题网站推广软件免费版大全
  • 站长工具seo综合查询怎么使用的微信推广平台怎么做
  • 网站建设公司的职责文章网站哪里建设好
  • 自己做免费网站百度统计网站速度诊断
  • 营销型网站制作流程外贸业务员招聘人才网
  • 网站方案设计温州做网店的网站
  • 娱乐网站制作上海设计展2021室内设计
  • 网站开发里程碑哪里建设网站不会被封
  • 广州建网站培训国内免费saas+crm
  • 网站搭建开发常见网站推广方式
  • 手机网站和app的区别wordpress 手机支付
  • 牛商网网站做seo好么青岛鲁icp 网站制作 牛商网
  • 找人做网站大概多少钱中国建设质量网官方网站
  • 电脑自己做网站可以吗网站空间在哪申请