【web】Spring中使用DataSourceTransactionManager手動提交或回滾事務

yingxian_Fei發表於2018-01-08

在使用spring進行web開發時,雖然spring提供的註解方式可以方便的處理很多原來需要手動提交或回滾的事務,但是註解方式有自己使用的侷限,比如在類的內部呼叫方法時,註解方式處理的事務就無法被觸發,此時可能需要手動處理相關資料庫的事務。本文記錄在spring開發時使用Spring提供的DataSourceTransactionManager進行事務提交或回滾處理。主要步驟如下:

1、注入DataSourceTransactionManager

在java物件中注入DataSourceTransactionManager物件,如使用如下註解方式注入:

	@Autowired
	// @Qualifier("transactionManager")
	private DataSourceTransactionManager transactionManager;
    DataSourceTransactionManager的建立就不在這裡描述了;

2、事務處理

手動開啟事務,捕獲異常,手動提交或回滾事務,示例程式碼如下:

	public void updateDatabase(CertificateRegisteRequest request,
			final CertificateRegisteResponse response) {
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		TransactionStatus status = transactionManager.getTransaction(def); // get
		try {
			if (logger.isDebugEnabled()) {
				logger.debug("request=" + request.toString());
				logger.debug("response=" + response.toString());
			}
			//do some things.
			//.............................................
			// commit.
			transactionManager.commit(status);
		} catch (Exception e) {
			transactionManager.rollback(status);
		}
	}


相關文章