- 场景:工作中使用到异步线程,在发生异常时对操作的数据进行回滚,使用 @Transactional(propagation = Propagation.REQUIRES_NEW)失效
- 解决方式:进行手动提交事务
- 代码:
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);
}