Spring 事务
2018-08-01 本文已影响0人
A_1341
声明式事务
- 在 类或方法 上直接注解
@Transactional
遇到RuntimeException异常会自动回滚, 其他异常不会回滚
手动catch住的异常也不会回滚
@Transactional
public PmUserEntity create(PmUserEntity user) throws Exception {
user.setId(UUID.randomUUID().toString());
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(Timestamp.valueOf(LocalDateTime.now()));
PmUserEntity save = pmUserRepository.save(user);
if (save != null)
throw new RuntimeException();
return save;
}
编程式事务
//注入事务管理器
private final TransactionTemplate transactionTemplate;
@Autowired
public UserServiceImpl(PlatformTransactionManager transactionManager) {
Assert.notNull(transactionManager, "The 'transactionManager' argument must not be null.");
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
//包裹需要开启事务的代码块 transactionTemplate.execute(new TransactionCallback<PmUserEntity>() {
// public PmUserEntity doInTransaction(TransactionStatus status) {
//status.setRollbackOnly 用于回滚
public PmUserEntity createByTransactional(PmUserEntity user) throws Exception {
PmUserEntity execute = transactionTemplate.execute(new TransactionCallback<PmUserEntity>() {
public PmUserEntity doInTransaction(TransactionStatus status) {
user.setId(UUID.randomUUID().toString());
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(Timestamp.valueOf(LocalDateTime.now()));
PmUserEntity save = pmUserRepository.save(user);
// status.setRollbackOnly();
return save;
}
});
return execute;
}