基于AOP的事务管理与普通事务管理有什么区别?
为什么80%的码农都做不了架构师?>>>
(一) 用编程的方法来实现,我觉得这种方法比较灵活,控制起来比较方便,但是需要写一些额外的代码
<!--定义Bean--><bean id="Test" class="com.test.Test"><property name="template" ref="jdbcTemplate" /><property name="transaction" ref="transactionTemplate" /></bean><!--事务模板 --> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager"> <ref local="transactionManager"/> </property> </bean>
<!-- jdbc事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource"/> </property>
public class Test {private JdbcTemplate template;private TransactionTemplate transaction;private static final String TEST_SQL="insert into user(name,date) values(?,?)";public void setTemplate(JdbcTemplate template) {this.template = template;}public void setTransaction(TransactionTemplate transaction) {this.transaction = transaction;}public void testSQL() throws Exception{for(int i=0;i<10;i++){if(i==8)throw new Exception("====error when updaa=======");//到第八条数据时我抛异常template.update(TEST_SQL,new Object[]{"xugang"+i,"123"});} }public static void main(String[] args) throws Exception{ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");final Test t=(Test)ctx.getBean("Test");boolean f=t.transaction.execute(new TransactionCallback<Boolean>() {@Overridepublic Boolean doInTransaction(TransactionStatus status) {try { t.testSQL();//测试SQLreturn Boolean.TRUE;//插入成功} catch (Exception e) {// TODO Auto-generated catch blockstatus.setRollbackOnly();//回滚事物e.printStackTrace();return Boolean.FALSE;}}});
}
(二)用声明的方法来实现事物的管理,在配置文件中加入下面
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="get*" read-only="true" /><!--以get开头的方法中的Connection是readonly的 --><tx:method name="update*" rollback-for="Throwable"/><!-- 在update开头的方法中遇到异常(Throwable)就回滚--><tx:method name="*" /></tx:attributes></tx:advice><aop:config><aop:pointcut expression="execution(* com.test.Test2.*(..))"<!-- 匹配com.test.Test2这个类下面的所有方法-->id="service" /><aop:advisor advice-ref="txAdvice" pointcut-ref="service" /></aop:config>
/*** 测试事物回滚* @author loki*/
public class Test2 {private JdbcTemplate template;private TransactionTemplate transaction;private static final String TEST_SQL="insert into user(name,date) values(?,?)";public void setTemplate(JdbcTemplate template) {this.template = template;}public void setTransaction(TransactionTemplate transaction) {this.transaction = transaction;}public void testSQL() throws Exception{for(int i=0;i<10;i++){if(i==8)throw new Exception("====error when updaa=======");template.update(TEST_SQL,new Object[]{"xugang"+i,"123"});}}public void getData(){template.update(TEST_SQL,new Object[]{"xugang","123"});}public void updateData() throws Exception{testSQL();} public static void main(String[] args) throws Exception{ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");final Test2 t=(Test2)ctx.getBean("Test2");//t.getData();//get开头的方法是readonly的就会抛下面的异常// java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowedt.updateData();//执行玩了以后,数据库里面一条数据都没有的,在第8条的时候回滚了}
}
转载于:https://my.oschina.net/garyun/blog/628524
基于AOP的事务管理与普通事务管理有什么区别?相关推荐
- Java开发【Spring之AOP详解(xml--注解->方法增强、事务管理(声明事务的实现))】
文章目录 引入 一.AOP概述 1.什么是AOP 2.AOP的优势及使用场景 3.AOP实现原理 二.代理模式 1.代理模式概念 2.代理模式分类 3.静态代理演示 定义HouseAgencyComp ...
- Spring AOP事务实现原理之事务管理器TransactionManager
流程图 该图介绍了事务的传播行为 该流通图展示的是TransactionManager具体如何结合事务的传播行为进行事务获取 该流通图展示的是TransactionManager具体如何结合事务的传播 ...
- 基于Spring框架的Controller中进行事务管理
如果是Spring框架,那么会有7种传播方式: REQUIRED - 没有事务就新建立一个事务,有事务就加入当前事务: SUPPORTS - 如果当前有事务则加入,没有就以没有事务的方式执行: MAN ...
- 事务(注解声明式事务管理)
1.什么事务 (1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败 2.事务四个特性(ACID) (1)原子性 (2)一致性 (3)隔离性 (4)持久性 1.原子 ...
- spring配置mysql事务管理_Spring 数据库事务管理机制
要点1 Spring事务管理方法编程式事务(TransactionTemplate.PlatformTransactionManager) 声明式事务(配置式.注解式) 2 Spring 注解 @Tr ...
- Spring的4种事务管理(1种编程式事务+三种声明事务)
2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...
- Spring事务管理-》Spring事务管理(annotation)
5.6 使用@Transactional 除了使用XML类型的事务管理,同时Spring也提供了Annotation类型的事务管理.如下所示: 一:Spring事务管理 =============== ...
- spring框架学习 - Data Access之 事务管理 - 声明式事务管理
接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...
- spring boot 事务_一个基于 RabbitMQ 的可复用的分布式事务消息架构方案!
作者:Throwable | https://www.cnblogs.com/throwable/p/12266806.html 前提 分布式事务是微服务实践中一个比较棘手的问题,在笔者所实施的微服务 ...
- Spring有几种事务管理,Spring事务管理接口是什么
1,spring有两种事务管理方式:①编程式 ②声明式.编程式的比较灵活,但是代码量大,存在重复的代码比较多:而声明式事务管理比编程式更灵活方便. 基于AOP的声明式事务管理,实质就是在方法执行前后 ...
最新文章
- python有用知识
- 一些日常工具集合(C++代码片段)
- 蓝桥杯练习系统习题-算法训练1
- 浅谈C/C++引用和指针的联系和区别
- 【AI呀,我去】科技圈顶流——元宇宙上线,快来揭开它的神秘面纱
- spy导入数据到oracle,运用SchemaSpy逆向工程制作数据库文档
- webrtc java api_WEBRTC--简单入门实例
- 检查 Linux 服务器性能
- 垃圾回收算法_垃圾回收算法有哪些
- 理解C#中的委托与事件
- SpringCloud工作笔记070---SpringCloud中使用Redis存储List类型数据
- 支持Linux系统恢复工具,12款Linux系统恢复工具
- 【数据结构】二叉搜索树的python实现
- 用 C# 做人脸检测(基于EmguCV)
- 《一梦江湖》(原楚留香)游戏拆解分析(一)
- 硬盘那些事(Windows系统下磁盘格式的优缺点)
- cdr 表格自动填充文字_极速office中表格的七个最常用技巧
- 一种基于暗通道先验算法的图像去雾技术研究
- 不错的google搜索地址
- org.testng.TestNGException: TestNG by default disables loading DTD from unsecured Urls.问题解决