SpringBoot中的编程式事务

手动回滚事务

1
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

手动开启事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 导入DataSourceTransactionManager
private final DataSourceTransactionManager transactionManager;

//方法中使用
public void execMonthd(List<DataList> datas){
//Spring提供的事务模板
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
// 事务传播行为:当前如果没有事务就新建一个事务,有则加入当前事务
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
transactionTemplate.setTimeout(30);
datas.forEach(data-> {
ruleTransactionTemplate.execute(call-> {
try {
//业务逻辑
checkData(data);
} catch (Exception e) {
call.setRollbackOnly();
log.error("事务回滚", data.getName());
}
return null;
});
});
}

或:通过SpringBoot管理Bean,作为依赖导入使用

1
2
3
4
5
6
7
8
9
/**
* 定义TransactionTemplate类型的bean
*/
@Bean
public TransactionTemplate transactionTemplate() {
TransactionTemplate transactionTemplate=new TransactionTemplate();
transactionTemplate.setTransactionManager(transactionManager());//注入事务管理器
return transactionTemplate;
}

本站所有内容(除特别声明外)均为原创,禁止转载。