有这样一个场景,加入了 @Transactional
之后,如果在代码运行过程中,有一些异步任务,或者是RPC调用之类的情况,
但是事务又进行了回归,那么就会发生脏读的情况,那么要怎么保证这一情况的发生呢?
解决方案很简单:
@Autowired
DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
try {
// code 业务代码
//提交事务
dataSourceTransactionManager.commit(transactionStatus);
} catch (Exception e) {
dataSourceTransactionManager.rollback(transactionStatus);
throw new RuntimeException(e.getMessage());
}
// 异步任务或者一些RPC调用
只需要对事务进行手动控制即可,不使用 @Transactional