博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring - 事务之编程式
阅读量:1997 次
发布时间:2019-04-27

本文共 1618 字,大约阅读时间需要 5 分钟。

1、编程式和声明式事务的区别

Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。 

简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现。

2、如何实现编程式事务?

Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。

3、使用TransactionTemplate

采用TransactionTemplate和采用其他Spring模板,如JdbcTempalte和HibernateTemplate是一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。代码片段:

TransactionTemplate tt = new TransactionTemplate(); // 新建一个TransactionTemplate    Object result = tt.execute(        new TransactionCallback(){              public Object doTransaction(TransactionStatus status){                  updateOperation();                  return resultOfUpdateOperation();              }      }); // 执行execute方法进行事务管理

使用TransactionCallback()可以返回一个值。如果使用TransactionCallbackWithoutResult则没有返回值。

4、使用PlatformTransactionManager

示例代码如下:

DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); //定义一个某个框架平台的TransactionManager,如JDBC、Hibernate    dataSourceTransactionManager.setDataSource(this.getJdbcTemplate().getDataSource()); // 设置数据源    DefaultTransactionDefinition transDef = new DefaultTransactionDefinition(); // 定义事务属性    transDef.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED); // 设置传播行为属性    TransactionStatus status = dataSourceTransactionManager.getTransaction(transDef); // 获得事务状态    try {        // 数据库操作        dataSourceTransactionManager.commit(status);// 提交    } catch (Exception e) {        dataSourceTransactionManager.rollback(status);// 回滚    }

 

附:注意事项

  1. 编程式事务是声明式事务的实现机制。
  2. 待更新...

转载地址:http://noktf.baihongyu.com/

你可能感兴趣的文章
计算机网络 —— 网络层 1.
查看>>
Dubbo+zookeeper 最简单的分布式搭建
查看>>
https数字证书交换过程
查看>>
http协议缓存详解
查看>>
Echarts使用及动态加载图表数据 折线图X轴数据动态加载
查看>>
高并发量网站解决方案
查看>>
接口api开发中安全性问题
查看>>
spring boot 知识点整理
查看>>
URL重定向,referer,referrer和安全
查看>>
Android生命周期
查看>>
Android进度条自定义——类似ProgressDialog效果的Dialog
查看>>
Android 之 ContentProvider 与 ContentResolver
查看>>
【接口自动化】
查看>>
SpringBoot搭建一个Web工程
查看>>
Spring Boot 安全框架 Shiro 入门
查看>>
如何用一句话激怒互联网人?
查看>>
用 Python 爬了点你们喜欢的电影
查看>>
推荐一位川大零基础转行 Python 的人生勇士
查看>>
讲真,做Python一定不要只会一个方向!
查看>>
Python 2大限来了!113天后自生自灭,官方不再维护更新
查看>>