负责公司网站的更新和维护,小程序开放平台,推广app赚佣金平台有哪些,乐清定制网站建设电话一、背景
Mysql在修改完数据后#xff0c;默认会自动触发事务Commit提交。 而在我们服务的一个方法里#xff0c;需要多次修改Mysql记录。 为了保证原子性#xff0c;我们需要将Mysql设为手动提交#xff0c;多次修改后再commit提交。
二、Spring事务
1、编程式事务管理…一、背景
Mysql在修改完数据后默认会自动触发事务Commit提交。 而在我们服务的一个方法里需要多次修改Mysql记录。 为了保证原子性我们需要将Mysql设为手动提交多次修改后再commit提交。
二、Spring事务
1、编程式事务管理
TransactionTemplate三组件PlatformTransactionManager事务管理器用于管理事务的开始、提交和回滚。TransactionDefinition事务定义用于定义事务的隔离级别、超时时间、只读等。TransactionCallback事务回调用于执行具体的业务逻辑。
使用1 private TransactionTemplate transactionTemplate;public void MyTransaction() {transactionTemplate.execute((status - {try {//todoreturn null;} catch (Exception e){status.setRollbackOnly();}return null;}));}
使用2 Autowired
private PlatformTransactionManager transactionManager;public void testTransaction() {TransactionStatus transactionStatus transactionManager.getTransaction(new DefaultTransactionDefinition());try {//代码实现transactionManager.commit(transactionStatus);} catch (Exception e) {transactionManager.rollback(transactionStatus);}
}2、声明式事务管理
Transactional
标注位置
标注在方法上它会在方法执行期间开启一个新的事务。如果方法成功完成则提交事务。如果方法抛出异常则回滚事务。标注在类上时它会应用于类中的所有公共方法并且可以通过在方法上指定propagation属性来覆盖类级别的行为。
属性
propagation 事务传播行为isolation 事务隔离级别timeout 定义事务的超时时间单位为秒。默认值为-1表示使用数据库的默认超时时间。readOnly是否只读。默认值为false表示允许读写操作。如果设置为true则只允许读操作。rollbackFor指定哪些异常需要回滚事务。默认值为RuntimeException和Error。可以指定其他异常并且可以指定多种异常例如rollbackFor{SQLException.class,MyException.class}。
Transactional(propagation Propagation.REQUIRED)
public void MyMethod {//你的业务代码
}三、Spring事务传播机制
假如我们的事务方法修改了某些数据。 但是里面还调用了另一个事务方法那该怎么处理 我们是要将当它们当成一个事务还是两个事务 Spring提供了七种策略可以让我们去选择。
Spring提供了七种策略事务传播机制
事务的传播机制PROPAGATION_REQUIRED支持当前事务如果当前没有事务就新建一个事务。(默认)。PROPAGATION_SUPPORTS支持当前事务如果当前没有事务就以非事务方式执行。PROPAGATION_MANDATORY支持当前事务如果当前没有事务就抛出异常。PROPAGATION_REQUIRES_NEW新建事务如果当前存在事务把当前事务挂起。PROPAGATION_NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起。PROPAGATION_NEVER以非事务方式执行如果当前存在事务则抛出异常。PROPAGATION_NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则进行与PROPAGATION_REQUIRED类似的操作。