spring 配置事务不起作用原因 service层事务无效
最近在spring框架配置事务时发现事务没有起作用
调查最终方法 在service层中,方法内部调用到事务方法,事务是不起作用的
例子如下:
在spring xml中配置如下
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="find*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txPointcut" expression="execution(public * org.test.service..*.*(..))" /> <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice" /> </aop:config>
insert开头的方法放到一个事务管理中
如果service从中有两个public 的方法 insert 和 register方法
在service层 register方法中调用insert方法
在controller层调用的是register方法 那么service内部调用insert方法的事务是不起作用的
service类中的两个方法如下:
@Override public VehicleDevice insert(Long companyId, Long vehicleId) throws Exception { vehicleDAO.insert(companyId,vehicleId); } @Override public void register(Long companyId,List<Object[]> processedCsvContent) throws Exception { if(!CheckUtil.isNull(processedCsvContent)){ for(Object[] line : processedCsvContent){ Vehicle vehicle = (Vehicle)line[0]; insert(companyId, vehicle.getId()); } } }
controller层调用vehicleService.register();
insert方法在register内部调用那么事务是不会起作用的。
需要在xml中追加<tx:method name="register*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> 的配置。
其他事务不起作用 事务无效的情况参考 http://blog.csdn.net/szwangdf/article/details/41516239
来源://作者:/更新时间:2016-04-12
顶
踩
相关文章:
- spring mvc 获取HttpServletRequest HttpServletRespo
- 解决 Caused by: org.springframework.beans.BeanInst
- springmvc csv文件导出_csv文件下载_csv文件生成
- springmvc 后台参数校验 使用用注解方式及国际化的写
- 解决 org.springframework.beans.factory.BeanNotOfRe
- 解决 org.springframework.beans.factory.BeanCreatio
- spring 使用代码如何读取properties配置文件
- springmvc controller跳转到下一个controller,action
- springmvc controller返回字符串乱码
- springmvc项目进行junit测试方法