- 浏览: 197753 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- java_基础 (26)
- java_web (15)
- javascript (9)
- extJS (0)
- dwr (0)
- guobin_ETL (1)
- guobin_ssh (17)
- guobin_webservice (1)
- guobin_jbpm (0)
- guobin_jquery (0)
- guobin_acegi (1)
- guobin_poi/jxl (2)
- guobin_multiThread (0)
- guobin_名称解释 (0)
- guobin_FLEX (0)
- guobin_php (0)
- guobin_ORACLE (1)
- guobin_mysql (0)
- guobin_linux (0)
- guobin_powerDesigner (0)
- guobin_visol (0)
- guobin_ER/STUDIO (0)
- guobin_jmesa (0)
- guobin_weblogic (0)
- guobin_kettle (0)
- guobin_一路风雨 (5)
- guobin_spark (0)
- java_xml (7)
- guobin_规则引擎 (0)
- 插件开发 (2)
- 软件管理 (3)
- spring mvc (2)
- java_jni (1)
- eclipse (1)
- oracle (0)
- 项目学习笔记 (1)
- java多线程学习记录 (9)
- websphere性能设置和日常维护 (2)
- (1)
- 系统软件架构设计 (1)
- ces (1)
- 需求分析 (2)
- IBM-CICS GATEWAY (1)
- 工具使用 (1)
- 网络信息安全编程 (1)
最新评论
-
yzh__:
学习一个
Hibernate 自关联注解方式 -
xiaoyahuang:
"2)将Sysdeo Plugin下的DevLoad ...
eclipse项目引用 -
guobin6125:
guobin6125 写道sfasshahhah评论的评论
欢迎使用Kit! -
guobin6125:
sfass
欢迎使用Kit! -
guobin6125:
tst23
欢迎使用Kit!
2011-03-24
Spring3.0中的事务控制的配置方法
文章分类:Java编程
第一种配置方法:基于XML的事务管理
这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:
Xml代码
1.
2.<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
3. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
4. -->
5.<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
6. <property name="dataSource" ref="dataSource"></property>
7.</bean>
8.
9.<!-- 定义事务通知 -->
10.<tx:advice id="txAdvice" transaction-manager="transactionManager">
11. <!-- 定义方法的过滤规则 -->
12. <tx:attributes>
13. <!-- 所有方法都使用事务 -->
14. <tx:method name="*" propagation="REQUIRED"/>
15. <!-- 定义所有get开头的方法都是只读的 -->
16. <tx:method name="get*" read-only="true"/>
17. </tx:attributes>
18.</tx:advice>
19.
20.<!-- 定义AOP配置 -->
21.<aop:config>
22. <!-- 定义一个切入点 -->
23. <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
24. <!-- 对切入点和事务的通知,进行适配 -->
25. <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
26.</aop:config>
<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如: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文件
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"/>
<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如: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示例
Java代码
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.
10. public TeacherDao getDao() {
11. return dao;
12. }
13.
14. public void setDao(TeacherDao dao) {
15. this.dao = dao;
16. }
17.
18. @Override
19. @Transactional(readOnly=true,propagation=Propagation.NEVER)
20. public List<Teacher> getAllTeachers() {
21. return getDao().getAllTeachers();
22. }
23.
24. @Override
25. public void addTeacher(Teacher teacher) {
26. if(teacher.getId() > 0){
27. getDao().updateTeacher(teacher);
28. }else{
29. getDao().addTeacher(teacher);
30. }
31. }
32.}
/**
* @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://zywang.iteye.com/blog/974331
Spring3.0中的事务控制的配置方法
文章分类:Java编程
第一种配置方法:基于XML的事务管理
这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:
Xml代码
1.
2.<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
3. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
4. -->
5.<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
6. <property name="dataSource" ref="dataSource"></property>
7.</bean>
8.
9.<!-- 定义事务通知 -->
10.<tx:advice id="txAdvice" transaction-manager="transactionManager">
11. <!-- 定义方法的过滤规则 -->
12. <tx:attributes>
13. <!-- 所有方法都使用事务 -->
14. <tx:method name="*" propagation="REQUIRED"/>
15. <!-- 定义所有get开头的方法都是只读的 -->
16. <tx:method name="get*" read-only="true"/>
17. </tx:attributes>
18.</tx:advice>
19.
20.<!-- 定义AOP配置 -->
21.<aop:config>
22. <!-- 定义一个切入点 -->
23. <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
24. <!-- 对切入点和事务的通知,进行适配 -->
25. <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
26.</aop:config>
<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如: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文件
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"/>
<!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
比如: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示例
Java代码
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.
10. public TeacherDao getDao() {
11. return dao;
12. }
13.
14. public void setDao(TeacherDao dao) {
15. this.dao = dao;
16. }
17.
18. @Override
19. @Transactional(readOnly=true,propagation=Propagation.NEVER)
20. public List<Teacher> getAllTeachers() {
21. return getDao().getAllTeachers();
22. }
23.
24. @Override
25. public void addTeacher(Teacher teacher) {
26. if(teacher.getId() > 0){
27. getDao().updateTeacher(teacher);
28. }else{
29. getDao().addTeacher(teacher);
30. }
31. }
32.}
/**
* @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://zywang.iteye.com/blog/974331
发表评论
-
解决jquery load 缓存数据 .
2012-08-19 16:03 1963当jquery load 一个页面时候 只加载一次 解决方 ... -
spring管理统一异常spring AOP的异常拦截 .
2012-08-18 17:57 9077系统的异常处理机制是衡量一个系统设计的关键因素,良好的异常处理 ... -
Socket 短连接、长连接
2012-08-14 15:11 1300socketSocket协议的形象描述socket的 英文原 ... -
easy ui 验证框02
2012-07-01 10:29 997easyui的验证分为纯客户端验证和ajax验证。 1. ... -
easy ui 验证框 01
2012-07-01 10:28 2772使用过程中的一积累,备查。 EasyUI 验证框使用方法 ... -
16款 web开发的工具
2012-05-24 13:33 870http://www.iteye.com/news/25137 ... -
欢迎使用Kit!
2012-05-08 10:26 1037http://xueduany.github.com/KitJ ... -
c3p0详细配置
2011-06-30 10:36 805c3p0详细配置 官方文档 : http://www.mch ... -
spring c3p0
2011-06-30 10:12 1279C3P0在spring中的配置 2007-01-30 11:2 ... -
oracle存储过程
2011-03-17 15:37 834Oracle 存储过程 关键字: storedprocedur ... -
使用Struts2拦截器实现日志管理系统
2011-03-12 12:33 973最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人 ... -
sql优化
2010-03-04 11:18 17861:前言 数据库 ... -
下拉框中 可编辑
2009-09-21 13:19 982<div style="position: r ... -
去除重复登录情况 --登录不重复
2009-08-17 17:25 1309以前做财务项目时遇到了一个问题,以前我都没有考虑过,这次 ...
相关推荐
在深入探讨Spring事务管理配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的Java平台,它提供了一套全面的编程和配置模型,旨在简化企业级应用的开发。其中,事务管理是Spring框架中的一个重要...
Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...
如果未回滚,可能是因为事务管理配置有误,或者事务管理被错误地关闭了。 为了彻底解决问题,首先检查事务管理的配置文件,确认`<tx:annotation-driven>`元素已经正确配置,同时检查数据库连接池配置,确保事务管理...
本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...
Spring 3.0 事务管理配置 Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML ...
本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...
Spring 框架是Java开发中...理解并熟练掌握Spring事务管理,对于提升应用程序的稳定性和可靠性至关重要。在实际开发中,结合声明式事务管理、事务传播行为、隔离级别和回滚规则,可以有效地确保数据的完整性和一致性。
总结来说,Spring事务管理失效的原因是多方面的,涵盖从代理模式原理到AOP的实现细节,再到异常处理机制,以及事务传播和隔离级别的配置等多个层面。开发者需要深入理解Spring框架的内部机制,才能在实际开发中有效...
### Spring事务管理详解 #### 一、Spring事务管理概述 Spring框架提供了强大的事务管理功能,使得开发者能够更方便地管理应用程序中的事务。Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 -...
本篇文章将深入探讨Spring事务管理的五种方法,旨在帮助开发者更好地理解和运用这一核心特性。 首先,我们来了解什么是事务。在数据库操作中,事务是一组逻辑操作,这些操作要么全部成功,要么全部失败,确保数据的...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
首先,Spring事务管理的核心概念是ACID(原子性、一致性、隔离性和持久性),这是所有事务系统的基础。在Spring中,事务管理分为两种模式:声明式事务管理和编程式事务管理。声明式事务管理通过配置元数据(如XML或...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。
Spring事务管理创造性的解决了很多以前要用重量级的应用服务器才能解决的事务问题,那么其实现原理一定很深奥吧?可是如果读者仔细研究了Spring事务管理的代码以后就会发现,事务管理其实也是如此简单的事情。这也...
- **配置事务管理器**:接下来,需要配置一个事务管理器(如`DataSourceTransactionManager`),它负责管理事务的开始、提交和回滚。 - **配置事务规则**:最后,需要配置事务规则,指定哪些方法需要在事务中执行。 ...
spring的事务管理配置详解.txt详细的描述了如何配置spring的事物。
1. **基于XML的全局事务配置**:这种方式通过在Spring配置文件中设置`<tx:advice>`和`<aop:config>`元素来实现事务管理。相比于第一种方式,这种方式更加简洁,适用于所有业务逻辑Bean。 2. **基于注解的事务配置**...
在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供...如果你想要深入了解,可以参考提供的博客链接或其他相关资料,进一步学习Spring事务管理的细节和最佳实践。
Spring事务管理就是围绕这些特性来确保数据的一致性。 四、事务的传播行为 在Spring中,我们可以配置事务的传播行为,比如REQUIRED(默认,如果当前存在事务,则加入当前事务,否则新建一个事务)、PROPAGATION_...