声明式事务
只需要在方法上面增加Transactional注解即可。
- 注解只能应用到 public 方法上才会有效;
- 调用当前类如果采用this直接调用注解的方法,会失效。
@Transactional
public void test() {
//todo
}
编程式事务
对于希望更细粒度的事务管理,希望在方法中,自己控制事务范围,可以采用TransactionManager进行管理。
@Autowired
private PlatformTransactionManager transactionManager;
@Autowired
private TransactionDefinition transactionDefinition;
@Transactional
@Override
public void test() {
TransactionStatus transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition);
try {
//todo
this.transactionManager.commit(transactionStatus);
} catch (Exception err) {
this.transactionManager.rollback(transactionStatus);
}
}
事务模板
对于上述采用TransactionManager进行管理,发现还需要自己控制事务,并且代码不够整洁,可以采用事务模板。
@Autowired
private TransactionTemplate transactionTemplate;
@Override
public void test() {
transactionTemplate.execute(transactionStatus -> {
//todo
return Boolean.TRUE;
});
}