易出错记录
1、抽象基类Spring注入问题
特别注意:1、注解注入的属性需要用protected修饰,2、注解注入的属性需要有setter方法;
正确示例:
@Autowired protected A a; public void setA(A a) { this.a = a; }
2、spring事务隔离性,隔离级别,mysql默认隔离级别(可重复读)
MYSQL可重复读的隔离级别下使用了MVCC机制,select操作不会更新版本号,是快照读(历史版本)
同一事务下多次读结果一样,因此,并发情况下,两个事务下两个订单状态同时更改,每一个事务并不能读到另一个事务里的另一个订单状态发生变化。
InnoDb在可重复读下,检索条件存在索引的情况下,会自动使用间隙锁,一定程度上防止了幻读。
错误用法:一个事务操作里,更新一个订单的状态的完成后,查询另一个订单的状态,当这个两个订单状态都是目标状态时,将另一个总的父记录状态更新,如两个订单同时更新,则总的父记录不会被更新。