声明式事务
2016-03-28 20:44
274 查看
一个简单的小例子关于声明式事务 /** *CreatedbyAdministratoron2015/11/27. *声明式事务管理类 */ publicclassAddDAO{ JdbcTemplatejdbcTemplate; publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate){ this.jdbcTemplate=jdbcTemplate; } publicJdbcTemplategetJdbcTemplate(){ returnjdbcTemplate; } publicAddDAO(){} /**使用这个注解可以声明这个方法是一个事务 *关于事务的传播性 propagation=Propagation.REQUIRED属性为默认值,当在一个事务中调用一个事务的时候, 它将采用原来的事务即同一个事务,第一个sql完成,异常,事务回滚。 propagation=Propagation.REQUIRES_NEW的时候,当在一个事务中调用另一个事务,它 将采取创建一个新的事务,这样,当第一个sql这行完成,就完成了一个事务,然后异常来了, 接着抛出异常,第一个sql完成不再回滚。 **/ /**readOnly=false这个是只读属性*/ /**timeout=5设置指定强制回滚之前事务可以占用的时间**/ @Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.READ_COMMITTED, readOnly=false,timeout=5) publicvoidaddBook(){ Stringsql1="insertintoBookimformationvalues(100120,'zzyyxl','yxlzzy',30,900)"; jdbcTemplate.execute(sql1); System.out.println("firstissuccess"); /**可在这里加上人造异常测试事务**/ Stringsql2="insertintoBookimformationvalues(100121,'zzyyxl','yxlzzy',30,900)"; jdbcTemplate.execute(sql2); System.out.println("secondissuccess"); } } /** 使用声明式事务分为三步,第一,定义事务管理器, 第二,<tx:annotation-driventransaction-manager="dataSourceTransactionManager"/>, 定义这个可以使用注解的方式实现声明式事务。 第三在相对应得类的方法前注解@Transactional//使用这个注解可以声明这个方法是一个事务 **/
publicclassMain{ //这个事务是成功的 publicstaticvoidmain(String[]args){ ApplicationContextctx=newClassPathXmlApplicationContext("spring-config.xml"); AddDAOaddDAO=(AddDAO)ctx.getBean("addDAO"); addDAO.addBook(); } } spring配置内容如下:(前提:配过dataSource和jdbcTemplate)
<!--定义事务管理器--> <beanid="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"> <refbean="dataSource2"></ref> </property> </bean> <!--定义这个可以使用注解的方式实现声明式事务--> <tx:annotation-driventransaction-manager="dataSourceTransactionManager"/> <!--配置一个普通的TransactionProxyFactoryBean包下的bean,实现声明式事务--> <beanid="addDAO"class="Spring_AOP.TransactionProxyFactoryBean.AddDAO"> <propertyname="jdbcTemplate"> <refbean="jdbcTemplate"></ref> </property> </bean>
/** *这个类用来测试事务的传播 *即propagation=Propagation.REQUIRES_NEW的时候,当在一个事务中调用另一个事务,它 将采取创建一个新的事务,这样,当第一个sql这行完成,就完成了一个事务,然后异常来了, 接着抛出异常,第一个sql完成不再回滚。 ***/ publicclassTestswcb{ publicTestswcb(){} privateAddDAOaddDAO; publicvoidsetAddDAO(AddDAOaddDAO){ this.addDAO=addDAO; } @Transactional(propagation=Propagation.REQUIRED) publicvoidcs(){ addDAO.addBook(); //这里可以人造异常,测试事务的传播 addDAO.addBook(); } publicstaticvoidmain(String[]args){ ApplicationContextctx=newClassPathXmlApplicationContext("spring-config.xml"); Testswcbtestswcb=(Testswcb)ctx.getBean("testswcb"); testswcb.cs(); } }
spring里面的配置如下: <beanid="testswcb"class="Spring_AOP.TransactionProxyFactoryBean.Testswcb"> <propertyname="addDAO"ref="addDAO"></property> </bean>
相关文章推荐
- HDU 5044 Tree LCA
- 单链表的逆置
- java就业指导
- HDU 5256 序列变换 (LIS变形&&STL)
- JQ事件绑定效果|||事件气泡
- Leetcode 57 Insert Interval
- 【慕课笔记】1-2 多线程背景知识介绍-多线程基础概念介绍
- C++作业-2
- AWS SQS DOC AND RUBY DEMO
- 机器学习十大算法之C4.5
- 使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)
- 关于c#的webbrows控件自动填写表单并获取提交后的网页内容
- POJ 2965(dfs ,规律)
- 3.1 电子书框架
- Image特效
- 理解 Android Build 系统
- Android获取手机信息和APP信息大全
- 第三周JAVA学习
- 搭建Drools开发环境
- 谈谈RGB、YUY2、YUYV、YVYU、UYVY、AYUV