本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9712072
建立时间:2004年12月20日




[java语言]spring中使用编程级的事务
原创空间,  软件技术

邢红瑞 发表于 2006/1/15 15:32:36

使用org.springframework.transaction.support.TransactionTemplate类,TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。在doInTransaction中进行的操作,如果抛出未捕获异常将被自动回滚,如果成功执行,则将被自动提交。使用TransactionTemplate类,必须实现TransactionCallback接口,transactionCallback只有一个实现方法,使用匿名内部类,doInTransaction()处理事务。类似与JDbcTemplate,Callback类的编写违背很多人的编程习惯,传进匿名类之前要改成final。配置文件<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> </bean> DAO中<property name=" transactionTemplate"> <ref bean=" transactionTemplate"/> </property> 使用TransactionTemplate的doInTransaction() 不能抛出任何checked exceptions,必须将异常包装为unchecked exceptions,因为TransactionTemplate不支持throws 下面是代码transactionTemplate.execute(new TransactionCallback() {public Object doInTransaction(TransactionStatus ts) {try {// do stuff} catch (Exception e) {ts.setRollbackOnly();}return null;}});使用PlatformTransactionManager效率更高package module; import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.TransactionDefinition;import org.springframework.transaction.TransactionStatus;import org.springframework.transaction.support.DefaultTransactionDefinition;import org.springframework.jdbc.datasource.DriverManagerDataSource;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.dao.DataAccessException; import javax.sql.DataSource; public class testTranORacleDAO {    private static DataSource dataSource;    private static PlatformTransactionManager transactionManager;    private static JdbcTemplate jt;     public static void main(String[] args) {        DriverManagerDataSource dataSource = new DriverManagerDataSource();        dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");        dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ILoveMM");        dataSource.setUsername("system");        dataSource.setPassword("manager");        DataSourceTransactionManager tm = new DataSourceTransactionManager();        tm.setDataSource(dataSource);        transactionManager = tm;        doUpdate(dataSource);    }     public static void doUpdate(DataSource dataSource) {        DefaultTransactionDefinition td = new DefaultTransactionDefinition(                TransactionDefinition.PROPAGATION_REQUIRED);        td.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);        td.setTimeout(10);        TransactionStatus status = transactionManager.getTransaction(td);         try {            update(dataSource);        } catch (DataAccessException e) {            transactionManager.rollback(status);            throw e;        }        transactionManager.commit(status);    }     public static void update(DataSource dataSource) {        jt = new JdbcTemplate(dataSource);        jt.update("delete  from beers where id=2 ");        jt.update("insert into beers(id,BRAND,price) values(1,'3',100)");    }}


阅读全文(5360) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144784200 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号