满心期望,收获的确实失望
由于项目是基于原型系统调整,而原型系统中没有做任何的事务处理,所以想整合一个简单的事务控制包。
整理项目框架时,发现项目project中引用了其他公司开发的事务控制包,更巧的是,我毕业后去的就是那家公司,而且进入的第一个项目的数据库事务控制就是这个包做的框架,记得当时还反编译看过源码。
现在需要自己整了,当然希望对自己使用的东西有所了解,于是又反编译看源码,看了一天时间,最后的结论是:事务控制很简单,必须严格的遵守事务控制规则,这些规则包括:
1、不能嵌套事务。如果存在嵌套事务,则外层的事务回滚不能回滚内层事务的提交。
2、不能手动释放Connection链接,因为Connection对象是线程内共享的。如果想不使用事务,只从框架中获取数据库链接并人为控制链接的生命周期,将影响到同一线程的其他数据库操作。
最后的测试也验证了上面两点。
这就有点像简单的建立一个ThreadLocal<Connection>对象,必须严格的按照
TransactionManager.beginTransaction();
getConnection();
只能有一段事务码
TransactionManager.commitTransaction();
IF Exception exist
Transaction.rollBack();
中间如果嵌套事务,相当于内外两个单独的事务(即同一个Connection提交两次)。
其实这之前我自己做了一个简单的事务控制框架,可以实现嵌套和撇开事务控制单独使用Connection对象。但第一次做,怕出问题,所以心里没底。结果看了那个源码后,感觉只是将程序的层次写得更抽象和复杂了,本质的功能却很死板并且容易出问题。
诶,菜鸟的起步阶段可能就是这么的举步维艰!特别是项目组只有自己一个人,而且需要看前辈们写的那些没有一点组织性的代码。这种时刻只有一种感觉——什么方面的只是都感觉欠缺,不够用;什么都想学;但学什么都有点力不从心。项目时间紧迫,没什么时间可以抽出来潜心的学点什么,都是囫囵吞枣,一知半解。