PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
编程式事务:即采用注解的方式
当事务传播特性为PROPAGATION_REQUIRED(大部分项目默认配置)时,业务组合调用时,在其组合方法也添加PROPAGATION_REQUIRED传播特性
子业务方法会使用上级方法的事务,若某发生异常,会Rollback.
@Transactional(propagation=Propagation.REQUIRED, rollbackFor = Throwable.class)
2 public void insertA(){
3 jdbcTempalte.update("insert into a(name) values('a')");
4 }
5 @Transactional(propagation=Propagation.REQUIRED, rollbackFor = Throwable.class)
6 public void insertB(){
7 jdbcTempalte.update("insert into b(name) values('b')");
8 }
9 @Transactional(propagation=Propagation.REQUIRED, rollbackFor = Throwable.class)
10 public void insertAB() throws Exception{
11 insertA();
12 if(1==1){//发生异常时,insertA()所做操作回滚!
13 throw new Exception(" occur exception defined by user!");
14 }
15 insertB();
16 }