今天微服务系统遇到问题,更新数据失败,本地测试没有问题,然后仔细读业务代码发现是一个接口,先插入数据,其他服务的调用接口里面又更新该条数据,实际上此时并没有将数据插入到数据库中,引起报错。
解决方案代码:
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
// 手动启动事务
DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus transaction = dataSourceTransactionManager.getTransaction(defaultTransactionDefinition);
/**
相关业务代码
**/
// 手动提交事务
dataSourceTransactionManager.commit(transaction);
把会导致问题的代码放在相关业务代码中,然后手动commit。