对Spring 容器管理事务支持的总结
- Connection conn =
- DataSourceUtils.getConnection();
- //开启事务
- conn.setAutoCommit(false);
- try {
- Object retVal =
- callback.doInConnection(conn);
- conn.commit(); //提交事务
- return retVal;
- }catch (Exception e) {
- conn.rollback();//回滚事务
- throw e;
- }finally {
- conn.close();
- }
- Session session = null;
- Transaction transaction = null;
- try {
- session = factory.openSession();
- //开启事务
- transaction = session.beginTransaction();
- transation.begin();
- session.save(user);
- transaction.commit();//提交事务
- } catch (Exception e) {
- e.printStackTrace();
- transaction.rollback();//回滚事务
- return false;
- }finally{
- session.close();
- }
- public interface PlatformTransactionManager {
- TransactionStatus getTransaction(TransactionDefinition definition)
- throws TransactionException;
- void commit(TransactionStatus status) throws TransactionException;
- void rollback(TransactionStatus status) throws TransactionException;
- }
- //1.获取事务管理器
- PlatformTransactionManager txManager = (PlatformTransactionManager)
- ctx.getBean("txManager");
- //2.定义事务属性
- DefaultTransactionDefinition td = new DefaultTransactionDefinition();
- td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
- //3开启事务,得到事务状态
- TransactionStatus status = txManager.getTransaction(td);
- try {
- //4.执行数据库操作
- System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
- //5、提交事务
- txManager.commit(status);
- }catch (Exception e) {
- //6、回滚事务
- txManager.rollback(status);
- }
重复代码太多,而且必须手工开启/释放(提交/回滚)事务。
- //1.获取事务管理器
- PlatformTransactionManager txManager = (PlatformTransactionManager)
- ctx.getBean("txManager");
- //2、定义事务管理的模板
- TransactionTemplate transactionTemplate = new TransactionTemplate(txManager);
- //3.定义事务属性
- transactionTemplate.
- setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
- //4.回调,执行真正的数据库操作,如果需要返回值需要在回调里返回
- transactionTemplate.execute(new TransactionCallback() {
- @Override
- public Object doInTransaction(TransactionStatus status) {
- //5.执行数据库操作
- System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
- return null;
- }
- });
需要写模板代码,我们知道事务其实是一个切面,因此我们通过AOP来解决


对Spring 容器管理事务支持的总结的更多相关文章
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...
- Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。
借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...
- 如何在自定义Listener(监听器)中使用Spring容器管理的bean
正好以前项目中碰到这个问题,现在网上偶然又看到这个问题的博文,那就转一下吧. 原文:http://blog.lifw.org/post/46428852 感谢作者 另外补充下:在web Server容 ...
- Spring框架(管理事务)
Spring底层使用Transaction事物模板来进行操作.具体操作: 1.service 需要获得 TransactionTemplate 2.spring 配置模板,并注入给service 3. ...
- 为什么不在spring容器管理controller
Spring容器与SpringMVC容器 1.疑问:为什么不用spring去管理所有类? 我们配置springMVC 中,为什么controller不直接交给spring 管理而要spring MVC ...
- Spring Redis开启事务支持错误用法导致服务不可用
1.事故背景 在APP访问服务器接口时需要从redis中获取token进行校验,服务器上线后发现一开始可以正常访问,但只要短时间内请求量增长服务则无法响应 2.排查流程 (1)使用top指令查看C ...
- Spring怎么管理事务?
我们一般通过aop管理事务,就是把代码看成一个纵向有序的,然后通过aop管理事务,就好比增删改的时候需要开启一个事务,我们给他配置一个required,required就是有事务就执行事务,没有就给他 ...
- Spring容器管理各种文件
1. 导入文件 <import resource="applicationContext-dataSource.xml" /> 2. 引用资源配置文件 <cont ...
- 使用 Spring 容器管理 Filter
当我们用Filter时,往往需要使用一些辅助的service,在普通的java中,只要声明(set,get方法)后在spring-application配置文件中配置就可以了,但是由于Filter与L ...
随机推荐
- 【转】Android Shape绘制虚线在手机端查看是实线的问题
Android share绘制虚线在手机上显示实线问题 给控件添加Drawableleft等图片后,单独给图片设置动画效果,参考文章: http://blog.csdn.net/langzxz/art ...
- 如何设置maven的local repository目录
step1:默认会放在~/.m2/repository目录下 (“~”代表用户的目录,比如windows下一般都是C:\Documents and Settings\[你的用户名]\.由于“Docum ...
- Element div is not closed
报错内容:Element div is not closed 解决方法: 将代码复制到NotePad++.SubLime Text等文本编辑器中,另存为.jsp或者.html文件. 这样可以利用语法高 ...
- 删除Eclipse已有的SVN资源库位置
点击Eclipse菜单栏的[Window]->[Show View]->[Other],在弹出的对话框中,选择[SVN]->[SVN资源库],然后点击[OK]. 接着,在Eclips ...
- cdoj842-天下归晋 【树状数组】
http://acm.uestc.edu.cn/#/problem/show/842 天下归晋 Time Limit: 3000/1000MS (Java/Others) Memory Lim ...
- iOS 管理库 Carthage 安装以及使用
https://blog.csdn.net/Mazy_ma/article/details/70185547
- 利用redis完成自动补全搜索功能(三)
前面已经完成了分词和自动提示功能,最后把搜索结合在一起,来个完成的案例.当然最好还是用搜索分词解决,这个只是一个临时解决方案. 其实加上搜索很简单,要做的就是3件事 1. 分词的时候,把有用词的id存 ...
- maven打包部署到私服
转载地址:http://blog.csdn.net/stormragewang/article/details/43407471 心得 apache的开源maven插件对我们使用maven进行打包,发 ...
- php 使用html5 XHR2 上传文件 进度显示
思路:只要我们知道上传文件的总大小,还有上传过程中上传文件的大小,那么就可以实现进度显示了. 在html5中,XMLHttpRequest对象,传送数据的时候,progress事件用来返回进度信息. ...
- 【SQL模板】一.修改/新增存储过程TSQL
---Name: 创建存储过程模板.sql ---Purpose: 用于创建 数据库中 新的存储过程 ---Author: xx ---Time: 2015-12-18 10:26:06 ---Rem ...