Spring框架自定義提交與回滾事務
阿新 • • 發佈:2022-04-20
1. 補充知識:
Spring框架的七種事務傳播行為:
事務傳播行為型別 | 說明 |
---|---|
PROPAGATION_REQUIRED | 如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中,REQUIRED事務丟擲異常回滾,外部方法事務也將回滾。 |
PROPAGATION_SUPPORTS | 支援當前事務,如果當前沒有事務,就以非事務方式執行。 |
PROPAGATION_MANDATORY | 使用當前的事務,如果當前沒有事務,就丟擲異常。 |
PROPAGATION_REQUIRES_NEW | 新建事務,如果當前存在事務,把當前事務掛起。 |
PROPAGATION_NOT_SUPPORTED |
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 |
PROPAGATION_NEVER | 以非事務方式執行,如果當前存在事務,則丟擲異常。 |
PROPAGATION_NESTED | 如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作,NESTED方法丟擲異常回滾,不會影響到外部方法的事務。 |
2. 自定義提交與回滾事務:
@Autowired
PlatformTransactionManager transactionManager;
private void doTransaction() {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
//根據需要更改事務的傳播行為
definition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus transactionStatus = transactionManager.getTransaction(definition);
try {
//TODO
//自定義需要事務管理SQL業務
} catch (Exception e) {
//回滾
transactionManager.rollback(transactionStatus);
}
//提交
transactionManager.commit(transactionStatus);
}