spring3.0事务管理配置
转载:http://war-martin.iteye.com/blog/1396335
第一种配置方法:基于XML的事务管理
这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:
- <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
- 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
- -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 定义事务通知 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <!-- 定义方法的过滤规则 -->
- <tx:attributes>
- <!-- 所有方法都使用事务 -->
- <tx:method name="*" propagation="REQUIRED"/>
- <!-- 定义所有get开头的方法都是只读的 -->
- <tx:method name="get*" read-only="true"/>
- </tx:attributes>
- </tx:advice>
- <!-- 定义AOP配置 -->
- <aop:config>
- <!-- 定义一个切入点 -->
- <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
- <!-- 对切入点和事务的通知,进行适配 -->
- <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
- </aop:config>
第二中配置方法:基于@Transactional的事务管理
这种方法,只需要在Spring配置文件中定义一个事务管理对象(如DataSourceTransactionManager),然后加入<tx:annotation-driven/>节点,引用该事务管理对象,然后即可在需要进行事务处理的类和方法使用@Transactional进行标注。示例如下:
Spring配置XML文件
- <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
- 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
- -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 声明使用注解式事务 -->
- <tx:annotation-driven transaction-manager="transactionManager"/>
Java代码中@Transactional示例
- /**
- * @author ZYWANG 2011-3-24
- */
- @Service
- @Transactional(propagation = Propagation.REQUIRED)
- public class TeacherServicesImpl implements TeacherServices {
- @Autowired
- TeacherDao dao = null;
- public TeacherDao getDao() {
- return dao;
- }
- public void setDao(TeacherDao dao) {
- this.dao = dao;
- }
- @Override
- @Transactional(readOnly=true,propagation=Propagation.NEVER)
- public List<Teacher> getAllTeachers() {
- return getDao().getAllTeachers();
- }
- @Override
- public void addTeacher(Teacher teacher) {
- if(teacher.getId() > 0){
- getDao().updateTeacher(teacher);
- }else{
- getDao().addTeacher(teacher);
- }
- }
- }
个人认为第一中方式的配置的侵入性低多了,写程序时只需要关注业务和命名规范,不需要考虑事务处理;第二种方式的配置可以更加灵活的使用事务,个性化定制。
以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》
spring3.0事务管理配置的更多相关文章
- spring3.0事务的配置
第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpd ...
- 事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...
- Spring事务管理配置以及异常处理
Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- spring,mybatis事务管理配置与@Transactional注解使用[转]
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...
- spring,mybatis事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...
- Spring3数据库事务管理机制
Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnianshilongnian.iteye.com/blog/1496953 Spring提供 ...
- JTA事务管理--配置剖析(二)
Spring引用Tomcat的 JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JD ...
- JTA事务管理--配置剖析
概述 [IT168 专稿]Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还认为 ...
- Spring事务管理配置示例
(一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...
随机推荐
- HTML标签小记
<body> </body>标签,网页内容放在这里 <p> </p>标签,网页的段落 <hx> </hx>标签,网页的标题 &l ...
- ASP.NET Razor——Razor 简介
ASP.NET Razor - 标记 Razor 不是一种编程语言.它是服务器端的标记语言. 什么是 Razor? Razor 是一种标记语法,可以让您将基于服务器的代码(Visual Basic 和 ...
- I/O扩展篇(基于74HC164/74HC165)
在我们的单片机应用系统中,常常会遇到I/O口不够的情况.譬如说接有外部RAM而且要求有16个以上的按键,8位数码管以上的显示.而且还不包括其它的外围器件.这时整个系统的I/O资源就很吃紧了.系统的扩展 ...
- BizTalk 中使用 WCF-OracleDB adapter
在使用BizTalk WCF-OracleDB adapter操作Oracle数据库时,遇到了一些问题,记录如下. 按照BizTalk的文档,目前BizTalk 2010支持的Oracle数据库版本如 ...
- SPRING + THYMELEAF 配置
1.使用的是Spring EL而不是Ognl.2.访问上下文的Bean用${@myBean.doSomething()}3.th:field,th:errors,th:errorclass用于form ...
- NUnit笔记
注意:单元测试中,Case 与 Case 之间不能有任何关系 测试方法不能有返回值,不能有参数,测试方法必须声明为 public [TestFixture] //声明测试类 [SetUp] //建立, ...
- css3++js钟表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OFBIZ:启动之StartupLoader
任意一个JAVA程序都是从main()开始启动的,OFBIZ也不例外.OFBIZ的main()位于framework/start/src/org/ofbiz/base/start/Start.java ...
- ThinkPHP 3.2.3 Pager分页
不是很喜欢TP的分页类,因为生成的分页url感觉有点不好理解,例如访问路径xxxx/home/show.html,在模板输出分页后,例如产生了页码,页码链接的路径会变成xxxx/home/show/p ...
- my first article
BLOG: http://codetask.org GIT: http://git.oschina.net/codetimer