springboot手动开启事务//第一种
@Service
public class MyService {
@Autowired
private TransactionTemplate transactionTemplate;
@Autowired
private SomeRepository someRepository;
public void performBusinessLogic() {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
// 业务逻辑
someRepository.save(new Entity("Data1"));
someRepository.save(new Entity("Data2"));
// 如果发生异常,手动触发回滚
if (someCondition) {
throw new RuntimeException("Something went wrong!");
}
} catch (Exception e) {
// 触发回滚
status.setRollbackOnly();
throw e; // 重新抛出异常
}
}
});
}
}
//第二种
@Autowired
private PlatformTransactionManager transactionManager;
public void updateOrders(List<Integer> orderIds) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setName("updateOrdersTransaction");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);
try {
// 执行更新操作
// 这里假设你有一个 KOrderMapper
KOrderMapper kOrderMapper = ...; // 从你的配置中获取 KOrderMapper
kOrderMapper.update(null, vQuery);
// 提交事务
transactionManager.commit(status);
} catch (Exception e) {
// 回滚事务
transactionManager.rollback(status);
throw e;
}
}