spring支持编程式事务和声明式事务两种方式。
声明式事务直接使用@Transactional注解即可,简单、快捷、方便,但@Transactional声明式事务的可控性太弱了,只可在方法或类上声明,做不到细粒度的事务控制。
现在主流都使用springboot了,介绍一下springboot中编程式事务
代码中使用,在使用bean中注入TransactionTemplate即可:
@Autowired
private TransactionTemplate transactionTemplate;
public void save() {
// 其他逻辑
transactionTemplate.execute((status) => {
save1();
save2();
return Boolean.TRUE;
})
}
在spring中为了支持编程式事务,专门提供了一个类:TransactionTemplate,在它的execute方法中,就实现了事务的功能。
相较于@Transactional注解声明式事务,基于TransactionTemplate的编程式事务。
优点:
1、避免由于spring aop问题,导致事务失效的问题。
2、能够更小粒度的控制事务的范围,更直观。