使用spring 3 和 连接池 事务遇到的问题
?此时查询都是正常的,在执行insert,update,delete时执行了sql但是数据库记录没有改变,经查证是一个配置项有问题:
?
?
?在代码中我们的Connection没有手动提交,所以不能持久化到数据库,为了省事就在配置文件中配置如下:
?后来随着逻辑的复杂,需要引入事务,所以使用spring的dataSource事务管理,根据spring的官方文档,加入如下配置:
?在代码中的Service方法上加入注解:@Transactional(propagation = Propagation.REQUIRED)
?测试代码如下:
?可是在测试后,发现事务不能回滚,第一次的插入数据每次测试都能插入,不能回滚,
当时很纳闷,究竟是什么原因导致事务不能生效呢?
起初怀疑是事务配置有问题,看了官方文档,google好了好多,发现配置没问题,
在后来耐着性子从头到尾看一下配置文件,并思考一下整个测试方法的执行过程,
然后恍然大悟,发现连接池的配置:
?也就是说jdbc虽然在事务里,但是自动提交了,所以spring事务无法让数据库回滚,把true改为false后,经测试数据库正常回滚!
从此次事件中得到的教训是,不要盲目的配置配置文件,发现问题时,要有根据的推理,并且了解整个事件执行的大体逻辑,并耐心的调试每个环节!这样错误就很容易找到了!
?