spring3.0事务的配置
第一种配置方法:基于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》
原文链接:http://war-martin.iteye.com/blog/1396335
spring3.0事务的配置的更多相关文章
- spring3.0事务管理配置
转载:http://war-martin.iteye.com/blog/1396335 第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的 ...
- spring3.0注解定时任务配置及说明
spring注解方式的定时任务配置: 第一步:spring配置文件 <?xml version="1.0" encoding="UTF-8"?> & ...
- spring3.0+Atomikos 构建jta的分布式事务 -- NO
摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...
- spring3.0+Atomikos 构建jta的分布式事务
摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...
- SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置
一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...
- spring3.0使用annotation完全代替XML(三)
很久之前写过两篇博客: spring3.0使用annotation完全代替XML spring3.0使用annotation完全代替XML(续) 用java config来代替XML,当时还遗留下一些 ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)
Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...
- 《Spring3.0就这么简单》
第一章 认识Spring 1.Spring提供的IOC容器,是Spring大杀器之一.容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创 ...
随机推荐
- 一条执行4秒的sql语句导致的系统问题 (转)
为了一看究竟,抓取了一个awr报告.发现系统的负载情况确实很严重,每秒的redo有1.6M,可见系统的负载不是主要在select上,可能有一些dml之类的操作极为频繁. 看了下等待事件.都是关于loc ...
- JavaScript实现网页右下角弹出窗口代码
<script language="JavaScript"><!--var no = 50;var speed = 1;var ns4up = (document ...
- vb串口通信界面
界面如上: 程序如下: Dim num As Byte '申明一个全局变量为单字节型 '单击“清空接收缓冲区”按钮时,将接收缓冲区清空,此过程为“清空接收缓冲区”的单击事件 Private S ...
- [Linux] killall 、kill 、pkill 命令详解
killall 命令 Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...
- 【转】Alsa音频编程【精华】
一.前序 这里了解一下各个参数的含义以及一些基本概念. 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每 ...
- Find the maximum(规律,大数)
Find the maximum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) ...
- [Regular Expressions] Match the Start and End of a Line
We can use: ^: match the beginning $: match the end Let's say we have the string like the following: ...
- SlipButton——滑动开关
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI1MjUwMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- js 代码命名规范系列
在微博上看到一个段子 “老子哪天出任ceo迎娶白富美走上人生巅峰之后,一定要雇两个长腿大熊的妹子.一个帮我想变量名字,一个帮我想git commit的message!” 可以看出 命名方方面面的问题困 ...
- ASP.NET中多个相同name的控件在后台正确取值
有兽, 页面上可能有多个相同name的Html表单控件, 一般在后台使用Request.Form[“name”]取值,并用‘,’分隔. 但是当值中包含逗号时, 取值就会出现异常, ...