转载:http://war-martin.iteye.com/blog/1396335

第一种配置方法:基于XML的事务管理

这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:

  1. <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
  2. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
  3. -->
  4. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  5. <property name="dataSource" ref="dataSource"></property>
  6. </bean>
  7. <!-- 定义事务通知 -->
  8. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  9. <!-- 定义方法的过滤规则 -->
  10. <tx:attributes>
  11. <!-- 所有方法都使用事务 -->
  12. <tx:method name="*" propagation="REQUIRED"/>
  13. <!-- 定义所有get开头的方法都是只读的 -->
  14. <tx:method name="get*" read-only="true"/>
  15. </tx:attributes>
  16. </tx:advice>
  17. <!-- 定义AOP配置 -->
  18. <aop:config>
  19. <!-- 定义一个切入点 -->
  20. <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
  21. <!-- 对切入点和事务的通知,进行适配 -->
  22. <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
  23. </aop:config>

第二中配置方法:基于@Transactional的事务管理

这种方法,只需要在Spring配置文件中定义一个事务管理对象(如DataSourceTransactionManager),然后加入<tx:annotation-driven/>节点,引用该事务管理对象,然后即可在需要进行事务处理的类和方法使用@Transactional进行标注。示例如下:

Spring配置XML文件

  1. <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
  2. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
  3. -->
  4. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  5. <property name="dataSource" ref="dataSource"></property>
  6. </bean>
  7. <!-- 声明使用注解式事务 -->
  8. <tx:annotation-driven transaction-manager="transactionManager"/>

Java代码中@Transactional示例

  1. /**
  2. * @author ZYWANG 2011-3-24
  3. */
  4. @Service
  5. @Transactional(propagation = Propagation.REQUIRED)
  6. public class TeacherServicesImpl implements TeacherServices {
  7. @Autowired
  8. TeacherDao dao = null;
  9. public TeacherDao getDao() {
  10. return dao;
  11. }
  12. public void setDao(TeacherDao dao) {
  13. this.dao = dao;
  14. }
  15. @Override
  16. @Transactional(readOnly=true,propagation=Propagation.NEVER)
  17. public List<Teacher> getAllTeachers() {
  18. return getDao().getAllTeachers();
  19. }
  20. @Override
  21. public void addTeacher(Teacher teacher) {
  22. if(teacher.getId() > 0){
  23. getDao().updateTeacher(teacher);
  24. }else{
  25. getDao().addTeacher(teacher);
  26. }
  27. }
  28. }

 个人认为第一中方式的配置的侵入性低多了,写程序时只需要关注业务和命名规范,不需要考虑事务处理;第二种方式的配置可以更加灵活的使用事务,个性化定制。

以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

spring3.0事务管理配置的更多相关文章

  1. spring3.0事务的配置

    第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpd ...

  2. 事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...

  3. Spring事务管理配置以及异常处理

    Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  4. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  5. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用[转]   spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...

  6. Spring3数据库事务管理机制

    Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnianshilongnian.iteye.com/blog/1496953 Spring提供 ...

  7. JTA事务管理--配置剖析(二)

    Spring引用Tomcat的 JTA事务     Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JD ...

  8. JTA事务管理--配置剖析

    概述    [IT168 专稿]Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还认为 ...

  9. Spring事务管理配置示例

    (一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...

随机推荐

  1. java SpringUtil获取bean

    package com.whaty.framework.common.spring; import java.io.PrintStream; import org.springframework.be ...

  2. [NOIP2011] mayan游戏(搜索+剪枝)

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  3. Android Listview 性能优化

    首先我一般使用的适配器是BaseAdapter,其中有两个方法最主要,分别是: getCount,getView, 在对Listview 进行优化的时候,首先使用 convertview 和viewH ...

  4. 关于 MAXScript 获取全部文件

    MAXScript 官方文档里关于获取文件夹下所有文件的方法 fn getFilesRecursive root pattern = ( dir_array = GetDirectories (roo ...

  5. 转- Oracle Audit 功能的使用和说明

    http://blog.itpub.net/9399028/viewspace-712457/审计(Audit) 用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在syst ...

  6. mysql命令行工具

    mysql包相关命令行工具 [root@manage ~]# rpm -qa|grep mysql mysql-server-5.1.73-5.el6_7.1.x86_64 mysql-5.1.73- ...

  7. sqlserver2008 ,只能选C盘目录,不能选其它盘目录

    数据库sql2008安装后,无论备份或还原,只能看到C盘,手工输入路径,错误提示如下:尝试打开或创建物理文件 'D:\数据库\db.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问 ...

  8. 电子面单纸打印时固定高度18cm,到底是多少px

    点评:A4纸竖向打印,html网页页面的宽度设置成多少?这个问题是我们大家所疑惑的,于是网上搜集整理下,希望可以帮助你们 最近开发项目时遇到了网页打印的问题,这是问题之二,打印宽度设置 在公制长度单位 ...

  9. [solr] - IKAnalyzer 分词加入

    1.下载IK Analyzer中文分词器:http://ik-analyzer.googlecode.com/files/IK%20Analyzer%202012FF_hf1.zip 2.解压出zip ...

  10. Oracle导入和导出

    导出:EXP userid=<username>/<password>@<service_name> file=<dmpname> e.g.exp sa ...