有时候在代码编写过程中,会有一些特殊情况,不能等事务自动提交,而是需要手动将事务提交,那么在spring中如何手动开启一个新事务,并提交呢?
@Autowired
private PlatformTransactionManager transactionManager;// 引入 (平台)事务管理器,Spring 事务策略的核心。
public void test() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);//新发起一个事务
TransactionStatus status = transactionManager.getTransaction(def);// 获得事务状态
try {
// 业务代码
transactionManager.commit(status);// 手动提交事务
}catch (Exception e){
// 异常的时候回滚
transactionManager.rollback(status);
}
}
已经验证可用
还在test补充项目中 可以搜索
public void testshiwu
推荐TransactionTemplate
示例代码如下:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class WordApplicationTests1 {
@Autowired
private PlatformTransactionManager transactionManager;
@Autowired
private TransactionTemplate transactionTemplate;
@Test
void contextLoads() {
TransactionStatus transaction = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
// 业务代码
transactionManager.commit(transaction);
} catch (TransactionException e) {
transactionManager.rollback(transaction);
throw new RuntimeException(e);
}
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
try {
// 业务代码
} catch (Exception e) {
status.setRollbackOnly();
throw new RuntimeException(e);
}
}
});
}
}
本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。