为什么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的事务管理与普通事务管理有什么区别?相关推荐

  1. Java开发【Spring之AOP详解(xml--注解->方法增强、事务管理(声明事务的实现))】

    文章目录 引入 一.AOP概述 1.什么是AOP 2.AOP的优势及使用场景 3.AOP实现原理 二.代理模式 1.代理模式概念 2.代理模式分类 3.静态代理演示 定义HouseAgencyComp ...

  2. Spring AOP事务实现原理之事务管理器TransactionManager

    流程图 该图介绍了事务的传播行为 该流通图展示的是TransactionManager具体如何结合事务的传播行为进行事务获取 该流通图展示的是TransactionManager具体如何结合事务的传播 ...

  3. 基于Spring框架的Controller中进行事务管理

    如果是Spring框架,那么会有7种传播方式: REQUIRED - 没有事务就新建立一个事务,有事务就加入当前事务: SUPPORTS - 如果当前有事务则加入,没有就以没有事务的方式执行: MAN ...

  4. 事务(注解声明式事务管理)

    1.什么事务 (1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败 2.事务四个特性(ACID) (1)原子性 (2)一致性 (3)隔离性 (4)持久性 1.原子 ...

  5. spring配置mysql事务管理_Spring 数据库事务管理机制

    要点1 Spring事务管理方法编程式事务(TransactionTemplate.PlatformTransactionManager) 声明式事务(配置式.注解式) 2 Spring 注解 @Tr ...

  6. Spring的4种事务管理(1种编程式事务+三种声明事务)

    2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...

  7. Spring事务管理-》Spring事务管理(annotation)

    5.6 使用@Transactional 除了使用XML类型的事务管理,同时Spring也提供了Annotation类型的事务管理.如下所示: 一:Spring事务管理 =============== ...

  8. spring框架学习 - Data Access之 事务管理 - 声明式事务管理

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...

  9. spring boot 事务_一个基于 RabbitMQ 的可复用的分布式事务消息架构方案!

    作者:Throwable | https://www.cnblogs.com/throwable/p/12266806.html 前提 分布式事务是微服务实践中一个比较棘手的问题,在笔者所实施的微服务 ...

  10. Spring有几种事务管理,Spring事务管理接口是什么

    1,spring有两种事务管理方式:①编程式  ②声明式.编程式的比较灵活,但是代码量大,存在重复的代码比较多:而声明式事务管理比编程式更灵活方便. 基于AOP的声明式事务管理,实质就是在方法执行前后 ...

最新文章

  1. python有用知识
  2. 一些日常工具集合(C++代码片段)
  3. 蓝桥杯练习系统习题-算法训练1
  4. 浅谈C/C++引用和指针的联系和区别
  5. 【AI呀,我去】科技圈顶流——元宇宙上线,快来揭开它的神秘面纱
  6. spy导入数据到oracle,运用SchemaSpy逆向工程制作数据库文档
  7. webrtc java api_WEBRTC--简单入门实例
  8. 检查 Linux 服务器性能
  9. 垃圾回收算法_垃圾回收算法有哪些
  10. 理解C#中的委托与事件
  11. SpringCloud工作笔记070---SpringCloud中使用Redis存储List类型数据
  12. 支持Linux系统恢复工具,12款Linux系统恢复工具
  13. 【数据结构】二叉搜索树的python实现
  14. 用 C# 做人脸检测(基于EmguCV)
  15. 《一梦江湖》(原楚留香)游戏拆解分析(一)
  16. 硬盘那些事(Windows系统下磁盘格式的优缺点)
  17. cdr 表格自动填充文字_极速office中表格的七个最常用技巧
  18. 一种基于暗通道先验算法的图像去雾技术研究
  19. 不错的google搜索地址
  20. org.testng.TestNGException: TestNG by default disables loading DTD from unsecured Urls.问题解决

热门文章

  1. 解决阿里云发邮箱问题
  2. How React Works (一)首次渲染
  3. 如果你在2018面试前端,那这篇文章最好看一看!
  4. 使用DDMS抓取安卓APP的奔溃日志
  5. SVN使用教程之——分支、合并
  6. 【从零学习openCV】IOS7下的人脸检測
  7. 安装 Linux -Mplayer 播放器
  8. 千万级通用的分页存储过程
  9. 冰刃——IceSword
  10. activeMQ 填坑记