- 场景:工作中使用到异步线程,在发生异常时对操作的数据进行回滚,使用 @Transactional(propagation = Propagation.REQUIRES_NEW)失效
- 解决方式:进行手动提交事务
- 代码:
//TODO :获取当前线程请求头信息(解决丢失请求头问题)
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ThreadUtil.execAsync(new Runnable() {
@Override
public void run() {
//每一个线程都来共享之前的请求数据
//每一个线程都来共享之前的请求数据
RequestContextHolder.setRequestAttributes(requestAttributes);
String name = "";
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物的传播行为
TransactionStatus status = txManager.getTransaction(def); // 获得事务状
try{
//业务代码
/*
*************
*/
txManager.commit(status);//手动提交事务
}catch(Exception e){
txManager.rollback(status);//手动回滚事务
}