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
相关文章
评论:
验证码:
匿名评论:

最新文章

文章排行