jdbctemplate與事務管理

2021-08-29 19:13:01 字數 1543 閱讀 1604

net.sourceforge.jtds.jdbc.driver

jdbc:jtds:sqlserver:

test

changeit

配置中包含了三個節點:

ø datasource

這裡我們採用了apache dhcp元件提供的datasource實現,並為其配置了

jdbc驅動、資料庫url、使用者名稱和密碼等引數。

ø transactionmanager

針對jdbc datasource型別的資料來源,我們選用了

datasourcetransactionmanager

作為事務管理元件。

如果需要使用基於容器的資料來源(jndi),我們可以採用如下配置:

jdbc/sample

ø userdao

申明了乙個userdao bean,並為其指定了datasource和

transactionmanger資源。

userdao對應的**如下:

public class userdao

public void settransactionmanager(platformtransactionmanager

transactionmanager)

public datasource executetestsource()

public void setdatasource(datasource datasource)

public void insertuser()

});}

}可以看到,在insertuser方法中,我們引入了乙個新的模板類:org.springframework.transaction.support.transactiontemplate。 transactiontemplate封裝了事務管理的功能,包括異常時的事務回滾,以及操作成功後的事務提交。和jdbctemplate一樣,它使得我們無需在瑣碎的try/catch/finally**中徘徊。

在dointransaction中進行的操作,如果丟擲未捕獲異常將被自動回滾,如果成功執行,則將被自動提交。

這裡我們故意製造了一些異常來觀察資料庫操作是否回滾(通過在第二條語句中更新自增id欄位故意觸發乙個異常):

編寫乙個簡單的testcase來觀察實際效果:

xmlbeanfactory factory = new xmlbeanfactory(is);

userdao userdao = (userdao) factory.getbean("userdao");

userdao.insertuser();

相信大家多少覺得上面的**有點凌亂,callback類的編寫似乎也有悖於日常的程式設計習慣(雖然筆者覺得這一方法比較有趣,因為它巧妙的解決了筆者在早期自行開發資料訪問模板中曾經遇到的問題)。

如何進一步避免上面這些問題?spring 的容器事務管理機制在這裡即體現出其強大的能量。

u 引數化配置的事務管理

propagation_required

propagation_required,readonly

JDBCTemplate 事務控制

專案場景 批量匯入,前端解析excel資料,然後批量傳入到後端,後端根據資料進行解析,然後在表和關聯表進行操作。當對一行資料操作時,如果有錯誤資訊則捕獲異常,則不插入該條資訊,繼續走下。excel單行資料出錯時,要進行回滾,不僅要在單錶中回滾,還要在關聯表中回滾。問題 如何控制事務?如果單錶插入資料...

JdbcTemplate 宣告式事務控制

jdbc是spring提供的專門操作關係型資料庫的模板,由於運算元據庫是有事務控制的,所以需要匯入jdbc和tx的pom包 xml配置 常用方法 jdbctemplate.update sql,params 宣告式事務 通過xml或者註解的方式,宣告配置 程式設計式事務 需要手動編寫事務 控制事務 ...

spring教程 JdbcTemplate詳解

jdbctemplate模板與dbutils工具模擬較類似.jdbc org.springframework.jdbc.core.jdbctemplate hibernate3.0 org.springframework.orm.hibernate3.hibernatetemplate ibatis...