1.在非分布式的接口级调用,如spring 的注解注入或者bean注入。他的事务是可以配置传播属性的。既,在同一项目下,如果A接口通过,B接口通过,C接口异常,在配置默认传播属性=REQUIRED。C接口异常会导致ABC均回滚。
需要注意的是,因为是接口级的调用,每个想要回滚的接口都要配置事务,以及传播属性为REQUIRED
2.关于资金修改的并发问题,三种方式,乐观锁,悲观锁,和变量累加。
乐观锁比方说:置一个version,每次修改,在where中version = 原version,set 的version= version +1
悲观锁则是:用forupdate 或者其他的方式进行锁表或者锁库,在修改的时候,不允许其他的代码更改。缺点是,不允许同时更改导致性能下降。
变量累加:每次获取变化量,在mapper 语句中,采用 set amount=amount+变化量的方式。这种方式能够防止更改覆盖,因为每次都是 现金额+变化量,也就意味着,并发情况下,也没有关系。
在同种业务类型修改,比如,某一账户退款接口,也可以在开头加一个分布式锁,既,其他的接口没有该锁,还是可以改某一账户的其他的金额字段,但是退款相关字段,或者该退款接口的多线程调用,能有效解决重复并发的问题,这里防止的不是金额,而是重复处理,浪费性能。
特此记录