Spring2.0 DataSourceTransactionManager 事务回滚有关问题
Spring2.0 DataSourceTransactionManager 事务回滚问题在使用Spring的DataSourceTransactionManager过程中
Spring2.0 DataSourceTransactionManager 事务回滚问题
在使用Spring的DataSourceTransactionManager过程中,系统发生第一次错误并进行回滚,可是已经提交的数据没有回滚,从第二次开始,系统发生错误后回滚就正常了。
private static final ThreadLocal session = new ThreadLocal();//DB使用线程同步DB db = (DB)session.get();
在事务之前如果使用过DB,也就是在事务之前获得过连接,那么在db.execute()操作时,获得的连接还是线程池中的连接,而不是TransactionManager中新创建的连接;这样的话,如果操作不报错,数据更新等是对的,因为conn.getAutoCommit()是true;如果报错,就会有数据被回滚。
这个现象在使用Spring的JDBCTemplate或者TransactionTemplate里面不会出问题,因为连接是它创建好给你使用的。
如果单独使用Spring的Transaction,就需要注意,必须在事务里面获得相应的数据库连接,除非你把你的数据库连接赋给事务。