Spring - 事务之编程式
发布日期:2021-06-30 23:47:33
浏览次数:2
分类:技术文章
本文共 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);// 回滚 }
附:注意事项
- 编程式事务是声明式事务的实现机制。
- 待更新...
转载地址:https://lux-sun.blog.csdn.net/article/details/84500633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月21日 13时57分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SQL命令分类(DDL、DML、DCL、TCL以及事务)
2019-05-01
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate 报错
2019-05-01
kafka集群搭建
2019-05-01
Python正则表达式,从入门到实战,精华都在这里!
2019-05-01
喜欢玩王者荣耀的有福了,用 Python 获取英雄皮肤壁纸
2019-05-01
一名数据分析师的SQL学习历程
2019-05-01
图解超经典的KNN算法 - 机器学习算法入门
2019-05-01
Python数据分析三剑客入门教程和思维导图
2019-05-01
看看|iPhone12 Pro原型机
2019-05-01
干货:整理一周!我的Python学习资源
2019-05-01
Plotly中绘制三种经典的股票交易图表(含视频讲解)
2019-05-01
1010个Pycharm快捷键
2019-05-01
网络知识扫盲:扒开 TCP 的外衣,我看清了 TCP 的本质
2019-05-01
为什么 Django 框架持续统治着 Python 开发?
2019-05-01
爬虫解析利器PyQuery详解及使用实践
2019-05-01
B 站,真滴牛逼!
2019-05-01
实锤了!史上最惨的新浪程序员
2019-05-01
斯坦福大学:人工智能本科 4 年课程清单
2019-05-01
用Python可视化详解茅台,财富密码get
2019-05-01
拯救你奇丑无比的Python代码的神器
2019-05-01