事务问题(一) | wsztrush
写在前面现在开发的系统对准确性要求非常高,而数据的一致性和准确性几乎完全依赖数据库的事务,如果事务跪了,结局是要多惨有多惨(经历过的都懂的)。
当然MySQL本身也有一些BUG但并不多,大部分的出错都是业务代码写残了,下面来看遇到过的一些例子!
常遇问题下面的场景都是Java操作MySQL/InnoDB、事务隔离级别为RC时遇到的:
不生效之一:代码问题不生效模板代码如下:
12345678910public class Manager { public void func1() { func2(); } @Transactional public void func2() { // 数据库操作 }}调用manager.func2事务是生效的,而调用manager.func1时不生效!开始分析原因:
Spring对@Transactional修饰的方法进行AOP拦截处理;Spring中的AOP是通过代理实现的;那么,先来看个代理的例子(CGLIB):
123456public Object intercept(Obj...阅读全文
当然MySQL本身也有一些BUG但并不多,大部分的出错都是业务代码写残了,下面来看遇到过的一些例子!
常遇问题下面的场景都是Java操作MySQL/InnoDB、事务隔离级别为RC时遇到的:
不生效之一:代码问题不生效模板代码如下:
12345678910public class Manager { public void func1() { func2(); } @Transactional public void func2() { // 数据库操作 }}调用manager.func2事务是生效的,而调用manager.func1时不生效!开始分析原因:
Spring对@Transactional修饰的方法进行AOP拦截处理;Spring中的AOP是通过代理实现的;那么,先来看个代理的例子(CGLIB):
123456public Object intercept(Obj...阅读全文