公司项目划分比较明细,当对用户进行删除或者修改时,就会对多张表进行操作,为了保证数据的:
1.原子性(Atomicity
2.一致性(Consistency)
3.持久性(Durability)
一 . 在public 方法上加 @Transactiona 注解 (启动报错)
原因是:spring jar 包引入不一致导致;(解决办法是:修改版本一致)
二 .事务详细配置:(采用以下配置方式,不使用注解方式,自定义配置方法名即可)
<!-- 配置事务管理器 -->
<bean
id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:advice
id="txAdvice"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" />
<tx:method name="delete*" />
<!-- 如果超过五秒,说明程序需要优化,太久导致用户交互差 -->
<tx:method name="search*" read-only="true" timeout="5" />
<tx:method name="update*" read-only="true" timeout="5" />
<!-- 没有以上面方法名开头的,统一不开事务 -->
</tx:attributes>
</tx:advice>
<aop:aspectj-autoproxy />
<!-- 配置关联事务切入点和事务属性 -->
<aop:config>
<aop:pointcut id="transactionPointCut" expression="execution(* com.lexiaotong.www.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointCut" order="1" />
<!-- dataSourceExchange : 数据源 或 已配置 的多数据源 -->
<aop:advisor advice-ref="dataSourceExchange" pointcut-ref="transactionPointCut" order="1"/>
</aop:config>
调用回滚方式:
1.必须是 public 修饰
2.在service 层调用 controller层调用无效
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
采用ssm框架,当以上事务都没问题的时候,还是报找不到事务的时候:(如图)
3.检查springMVC扫描配置:(将service 服务层拦截)
原因:当springMVC重复扫描service层的时候,回导致事务失效