1、name:哪些方法需要有事务控制,支持*通配符
2、read-only:boolean值,默认值为false,是否只读事务。true:告诉数据库此事务为只读,数据库优化,会对性能有一定提升,所以只要是查询的方法,建议使用此数据。false:事务需要提交的事务,建议新增、删除、修改。
新增方法一般:add,insert开头->add*,insert*
修改方法一般:set,update开头->set*, update*
删除方法一般:del,delete,remove开头->del*,delete*,remove*
查询方法一般:get,find开头->get*, find*
3、propagation:控制事务传播行为。当一个具有事务控制的方法被另一个有事务控制的方法调用后,需要如何管理事务?(新建事务?在事务中执行?把事务挂起?报异常?)
(propagation默认值)REQUIRED:要么全部成功;要么全部失败,回滚。
有A,B,C三个方法,A方法中调用了B和C方法
1、A方法已经开始事务,B、C会放在A方法的事务中执行,也就是ABC同一个事务里,任意出错,都会整体回滚。
2、A方法没有开启事务,B,C会各自开启事务,各自回滚。
SUPPORTS:
1、开启之后,有ABC三个方法,A调用BC,ABC只要有异常,就会回滚,哪怕是BC的SQL没问题,A人为的抛出异常,也会全部回滚。
2、A方法没有开启事务,B、C也没有,三个方法是在无事务状态下执行。任意一个方法出现异常都不会导致回滚,只会在异常点那个位置代码停止运行
。
MANDATORY:
A、B两个方法,B方法的事务传播行为propagation="MANDATORY"
A调用B,B必须在有事务的环境下运行,也就是说A方法没有事务,调用B方法就会报错。如果A有事务,B自己出错,那么只会在出错的代码位置停止运行。
REQUIRES_NEW:
A、B、C中,A没有事务,B、C事务=”REQUIRES_NEW”,A调用B、C,B、C会分别创建自己的事务。互不影响,有异常会各自回滚。
A有默认事务,BC会各自开启自己新的事务,BC互不影响;A的事务回滚不会影响BC方法(也就是说A和BC不是同一个事务);B有异常,会影响A,A回滚,B也会回滚,不会影响C;如果想B有异常但不影响A,需要给B捕获异常。
所以A、B、C三个是不同的事务,在执行B、C的事务的时候,A方法的事务会被暂时挂起,等待B、C事务执行完毕,继续执行A方法的事务
NOT_SUPPORTED:
有A、B两个方法,B方法的事务传播行为NOT_SUPPORTED
A调用B,B必须在非事务状态下执行,A没有事务,B方法直接执行即可。
A有事务,就把A方法的事务挂起,再执行B,执行完B,继续执行A方法的事务。
NEVER:
有A,B两个方法,B方法的事务传播行为NEVER
A方法调用B,B必须在非事务状态下执行,A没有事务,B直接执行。
A方法有事务,B执行报错。