本帖最后由 sdhahjaj 于 2014-04-01 00:19:50 编辑

解决方案 »

  1.   

    你先判断下你的单元测试是否真的提交事务了,在你的保存的地方,throw一个异常,看事务是否回滚。
    action层不提交事务,你需要看下你事务隔离等级
      

  2.   

    貌似 代码中应该有个commit操作
      

  3.   

    <!-- 事务管理 --> 
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="sqlSessionFactory"/>
        </bean>
    配置文件这样改下
      

  4.   

    你换个只有“两阶段提交”的数据库看看,比如Oracle你的Mysql的库有两种,你能搞清楚了再用它。
      

  5.   

    楼主你aop切点表达式拦截的是com.tl.serviceImpl包下(不含子包的)所有类的方法,你的事务类是不是在这个子包下了
      

  6.   

    看你的织入点写的对不对。把service包的层级贴一下
      

  7.   

    我的service文件是在com.tl.serviceImpl下的UserService类,
    然后在junit里面测试事务是可以提交的,正常录入到数据库。
    但是启动tamcat后 在ation调用service的addUser方法  就怎么也不提交事务  没办法录入数据库。
      

  8.   


    我在junti里面自己抛出异常是要回滚的,不会提交。也能正常的提交数据,如果注释掉<tx:method name="add*" propagation="REQUIRED" rollback-for="SQLException"/>就不能提交数据,因为我设置的是默认不自动提交。
    这说明我的事务起了作用的,但是在action里面就不一样了
      

  9.   

    应该是aop织入点的问题
    还有就是spring mvc的容器加载中,spring的包加载和web部分的包加载是处于两个明名空间的
    假设你的这个类加载是在applicationContext.xml 是用ContextLoaderListener加载的
    aop织入是在mvc的DispatcherServlet加载的
    那么aop就不能正确的匹配到切入点先确定类所在明名空间和aop是在同一空间下
    然后,对于事务管理器,建议采用自动配置,而不是aop切入
    事务管理器的配置示例:<bean  
        id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="dataSource"
        p:defaultTimeout="40">
    </bean> <tx:annotation-driven transaction-manager="transactionManager" />对于需要启用的service类,可以在类级别或者方法级别上用@Transactional注解1.类注解
    @Service
    @Transactional(readOnly=false)   // 只读事务 readOnly=true   读写事务 readOnly=false
    public class DaoWrapService {
    ......
    }2.方法注解
    public class DaoWrapService {
      @Transactional(readOnly=false)
      public void add(Object data) {
        .....
     }
    }
      

  10.   

     <aop:pointcut id="pointcut" expression="execution(* com.tl.serviceImpl.*.*(..))" />  你这里的事务应该是作用在service 这一层 所以 你的 注释应该 写在 service 层
    <!-- 事务管理 --> 
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="sqlSessionFactory"/>
        </bean> 是配置 全局事务的