Spring 事务配置实战(一):过滤无需事务处理的查询之类操作
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/> <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> </tx:attributes> </tx:advice>
各标签配置可参考:tx:advice详解
Tips:
tx:method中name标明的方法为transactionManager管理的需要应用事务处理方法。
不过,不符name的方法,也会应用到事务。so,日志会有Don't need create transactionManager……提示。
去除上则消息,需要在AOP注入配置中过滤掉,如查询。
具体参考以下配置:
<aop:config> <aop:pointcut id="pc" expression="(execution(* com.*.service..*(..))) and !(execution(* com.*.service..*.check*(..))) and !(execution(* com.*.service..*.find*(..))) and !(execution(* com.*.service..*.list*(..))) and !(execution(* com.*.service..*.get*(..)))" /> <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" /> </aop:config>
各标签配置可参考:aop:config详解
去除aop注入的service包及子包中,以find,get,list,check开头的方法。
如此,查询操作即可不需用到事务处理,也就没了Don't need create transactionManager……的提示。