- 浏览: 1052954 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (605)
- 数据挖掘 (22)
- spring (40)
- 工具使用 (39)
- java (137)
- JavaScript (40)
- webwork (12)
- web (120)
- 资源 (7)
- SSH (5)
- oracle (20)
- J2ME (1)
- 环境配置 (37)
- 项目管理 (29)
- mysql (14)
- struts (4)
- 项目总结 (27)
- ibatis学习 (33)
- 学习计划 (2)
- 缓存 (7)
- 重构 (3)
- Android (1)
- jquery (12)
- UML (3)
- 用户体验 (4)
- 习惯 (7)
- sakai (1)
- urlrewrite (4)
- rss (5)
- C plus plus (5)
- 算法 (5)
- 海量数据处理 (7)
- office(word、excel) (1)
- 面试题 (3)
- solr (8)
- 大数据 (2)
最新评论
-
hujin19861102:
截图看不见,最后一个webwrok的配置看不见
Ext+Webwork+Json 实现分页表格查询效果 -
蜗牛笔:
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
ICTCLAS 中科院分词系统 -
weipeng1986:
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
JAVA中字符串连接效率的测试 -
xiaoqiang2008:
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...
关于Spring中用quartz定时器在定时到达时同时执行两次的问题 -
Kent_Mu:
...
ibatis-dynamic的用法
http://www.iteye.com/topic/328095
声明式事务又有三种实现方法:
1 (第一种) 最早的方法,用TransactionProxyFactoryBean,他是一个有AOP代理功能的FactoryBean.他返回的对象有事务.
还要在spring的配置文件XML中配置,比较麻烦,不详细说.
- <!-- 事务测试DAO -->
- <bean id="go_TestPOAO" class="pic.dao.transaction_test.TestPOAOImpl" parent="go_POAOBase"></bean>
- <!-- 事务测试DAO 声明式事务管理 -->
- <bean id="go_TestPOAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="proxyInterfaces">
- <list>
- <value>pic.dao.transaction_test.TestPOAO</value>
- </list>
- </property>
- <property name="target" ref="go_TestPOAO"/>
- <property name="transactionManager" ref="transactionManager"/>
- <property name="transactionAttributes">
- <props>
- <prop key="insert*">PROPAGATION_REQUIRED</prop>
- </props>
- </property>
- </bean>
<!-- 事务测试DAO --> <bean id="go_TestPOAO" class="pic.dao.transaction_test.TestPOAOImpl" parent="go_POAOBase"></bean> <!-- 事务测试DAO 声明式事务管理 --> <bean id="go_TestPOAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="proxyInterfaces"> <list> <value>pic.dao.transaction_test.TestPOAO</value> </list> </property> <property name="target" ref="go_TestPOAO"/> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
2 (第二种) 使用<tx:>来实现声明式事务 ,也要在spring的配置文件XML中配置,比较麻烦,不详细说.
<tx:advice id=""> ..... </tx:advice> <aop:config> ..... </aop:config>
3 (第三种) 这个方法方便,使用注解来实现声明式事务, 下面详细说说这个方法:
第一步:引入<tx:>命名空间 ,在spring的配置文件中修改, beans根元素里多了三行,如下
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
第二步:在spring的配置文件中修改,将所有具有@Transactional 注解的bean自动配置为声明式事务支持
- <!--JDBC事务管理器,根据你的情况使用不同的事务管理器,如果工程中有Hibernate,就用Hibernate的事务管理器 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource">
- <ref local="dataSource"/>
- </property>
- </bean>
- <!-- 用注解来实现事务管理 -->
- <tx:annotation-driven transaction-manager="transactionManager"/>
<!--JDBC事务管理器,根据你的情况使用不同的事务管理器,如果工程中有Hibernate,就用Hibernate的事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref local="dataSource"/> </property> </bean> <!-- 用注解来实现事务管理 --> <tx:annotation-driven transaction-manager="transactionManager"/>
第三步: 在接口或类的声明处 ,写一个@Transactional. 要是只的接口上写, 接口的实现类就会继承下来.
接口的实现类的具体方法,还可以覆盖类声明处的设置.
- @Transactional
- public class TestPOAOImpl extends POAOBase implements TestPOAO
- {
- @Transactional(isolation = Isolation.READ_COMMITTED)
- public void test1()
- {
- String sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解赵云',30)";
- execute(sql);
- sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解张飞',26)";
- execute(sql);
- int a = 9 / 0; //异常
- sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解关羽',33)";
- execute(sql);
- System.out.println("走完了");
- }
- //execute() 方法略...
- }
@Transactional public class TestPOAOImpl extends POAOBase implements TestPOAO { @Transactional(isolation = Isolation.READ_COMMITTED) public void test1() { String sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解赵云',30)"; execute(sql); sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解张飞',26)"; execute(sql); int a = 9 / 0; //异常 sql = "INSERT INTO sy_test (NAME,AGE) VALUES('注解关羽',33)"; execute(sql); System.out.println("走完了"); } //execute() 方法略... }
注意的几点:
1 @Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.
2 默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚 . 遇到 受检查的异常 是不会回滚 的. 要想所有异常都回滚,要加上 @Transactional( rollbackFor={Exception.class,其它异常}) .
@Transactional 的所有可选属性如下:
属性 | 类型 | 默认值 | 说明 |
propagation | Propagation枚举 | REQUIRED | 事务传播属性 (下有说明) |
isolation | isolation枚举 | DEFAULT | 事务隔离级别 (另有说明) |
readOnly | boolean | false | 是否只读 |
timeout | int | -1 | 超时(秒) |
rollbackFor | Class[] | {} | 需要回滚的异常类 |
rollbackForClassName | String[] | {} | 需要回滚的异常类名 |
noRollbackFor | Class[] | {} | 不需要回滚的异常类 |
noRollbackForClassName | String[] | {} | 不需要回滚的异常类名 |
事务的隔离级别 有如下可选:
可以去看spring源码 : org.springframework.transaction.annotation.Isolation
我的"隔离级别"相关文章 有不明白的,可以去看看.
DEFAULT | 采用数据库默认隔离级别 |
READ_UNCOMMITTED | 请看"隔离级别"相关文章 |
READ_COMMITTED | 请看"隔离级别"相关文章 |
REPEATABLE_READ | 请看"隔离级别"相关文章 |
SERIALIZABLE | 请看 "隔离级别"相关文章 |
事务的传播属性 ,有如下可选
可以去看spring源码 : org.springframework.transaction.annotation.Propagation
REQUIRED | 业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务.这是spring默认的传播行为. |
SUPPORTS | 如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分,如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行. |
MANDATORY | 只能在一个已存在事务中执行,业务方法不能发起自己的事务,如果业务方法在没有事务的环境下调用,就抛异常 |
REQUIRES_NEW | 业务方法总是会为自己发起一个新的事务,如果方法已运行在一个事务中,则原有事务被挂起,新的事务被创建,直到方法结束,新事务才结束,原先的事务才会恢复执行. |
NOT_SUPPORTED | 声明方法需要事务,如果方法没有关联到一个事务,容器不会为它开启事务.如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行. |
NEVER | 声明方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常.只有没关联到事务,才正常执行. |
NESTED | 如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动的事务,则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保证点.内部事务回滚不会对外部事务造成影响, 它只对DataSourceTransactionManager 事务管理器起效. |
发表评论
-
spring 测试框架与维护项目结合问题
2011-11-02 02:18 1177之前项目中一直用 junit进行单元测试,使用的版本一直是ju ... -
数据日志记录讨论
2011-10-26 18:51 953详情见附件中的PPT -
spring+ibatis注解方式注入
2011-10-15 17:24 1040http://www.cnblogs.com/archie20 ... -
spring 注解 简化log4j配置
2011-10-09 23:40 986http://macrochen.iteye.com/blog ... -
spring 2.5 TestContext 测试框架
2011-10-09 19:18 6308大多同事都已经养成用j ... -
spring2.5 引入资源文件的方式
2011-10-09 16:55 1087以前项目中引入 数据库 连接相关的字符串 都是使用 &l ... -
Spring 配置中的 default-lazy-init="false"
2011-09-26 18:03 1860Spring 配置中的 default-lazy-init=& ... -
webwork+spring+ibatis注解培训文档
2011-08-15 17:26 1401今天整理了 spring 注解的使用,主要是结合公司 ... -
spring包详解 (转)
2010-11-18 17:25 888spring.jar是包含有完 ... -
spring整合hessian进行远程通讯
2010-09-30 16:04 1949由于日志没有图片功能,可以访问内部论坛: host配置: 1 ... -
远程调用 - spring+rmi
2010-09-26 22:29 1232Spring提供类用于集成各种远程访问技术。这种对远程访问的支 ... -
事务处理spring
2010-03-24 22:33 1011http://www.ibm.com/developerwor ... -
在并发情况下struts2与spring 组合需要注意的问题
2010-03-24 19:53 2101在并发情况下struts2与spring 组合需要注意的问题 ... -
使用import简化spring的配置文件
2010-01-28 18:13 1135对于spring配置文件的编 ... -
Spring 中的数据源 转载
2010-01-25 18:17 1219http://www.blogjava.net/masen ... -
Spring事务配置的五种方式(转)
2010-01-25 17:32 828转载自: http://www.blogjava.net ... -
spring 2.5 事务属性
2010-01-25 15:59 1625spring事务的属性 转载自http://zhangli-l ... -
spring 2.5 事务管理
2010-01-25 15:57 2037spring2.5的事物管理,分为两种方式,一是基于注解方式的 ... -
事务传播属性(转)
2010-01-25 15:53 1193事务的传播行为和隔离级别[transaction behavi ... -
spring aop execution pointcut 表达式
2010-01-25 13:02 2329Spring AOP 用户可能会经常使用 executio ...
相关推荐
Spring 2.0版本在事务处理方面做了许多改进,使得开发者能够更有效地管理应用程序的事务边界。这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 ...
### SPRING2.0开发详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序和服务。它最初由Rod Johnson在2004年创建,并随着时间的发展不断壮大和完善。Spring 2.0版本是Spring...
标题 "ext2.0+struts2.1+spring2.0+jdbc框架" 提到的是一个基于Java的Web开发架构,它结合了四个关键组件:EXT JS的2.0版本,Struts2.1,Spring2.0,以及JDBC(Java Database Connectivity)。这个组合在早期的Web...
《Spring2.0宝典源代码》是一份珍贵的学习资源,由知名作者李刚编写,旨在深入解析Spring框架的2.0版本。这份源代码集合是配合书籍《Spring2.0宝典》使用的,读者可以通过实际操作代码来理解和掌握Spring 2.0的核心...
Spring 2.0 是一个非常重要的Java框架,它在企业级应用开发中占据了核心地位,尤其是在基于Java的轻量级应用程序上下文(IoC)和面向切面编程(AOP)方面。本手册和使用指南提供了全面的Spring 2.0相关知识,包括其...
《Spring 2.0 中文参考手册》是一个详尽阐述 Spring 框架核心特性和扩展功能的重要资源,尤其对于中文开发者来说,它提供了一条理解 Spring 2.0 版本的关键途径。Spring 是一个广泛应用的 Java 开发框架,以其模块化...
Spring 2.0的MVC模块增强了模型绑定、数据验证和异常处理等功能,使Web开发更加高效。 六、portlet支持 Spring Portlet MVC框架是针对portlet应用的,它为portlet开发提供了与Spring MVC类似的结构。在Spring 2.0中...
Spring 2.0是Spring框架的一个重要版本,它在Java企业级应用开发中扮演着核心角色。本教程将深入探讨...文档`spring2.0-reference_final_zh_cn.chm`将详细阐述这些概念和技术,帮助你成为一名熟练的Spring开发者。
4. **Web MVC框架**:Spring 2.0的Web MVC框架提供了一个分层的架构,用于处理Web请求。它支持多种视图技术,如JSP、FreeMarker等,并且通过ModelAndView对象实现了模型与视图的解耦。 5. **Spring Portlet MVC**:...
2. **AOP(Aspect-Oriented Programming,面向切面编程)增强**:Spring 2.0增强了对AOP的支持,允许开发者定义和实现切面,从而更好地分离关注点,比如事务管理、日志记录等,可以独立于业务逻辑进行处理。...
总而言之,这份源代码集合是Spring 2.0学习者的宝贵资源,它涵盖了从基础到高级的各种主题,提供了一个全面了解和掌握Spring 2.0框架的实践平台。通过逐行阅读、调试和修改这些代码,开发者不仅可以巩固理论知识,还...
它提供了一组通用的抽象层,简化了数据库操作,同时支持声明式事务管理,降低了事务处理的复杂性。 4. **MVC框架**:Spring 2.0引入了Spring MVC,这是一个强大的Web应用程序框架,用于构建RESTful和基于HTTP的Web...
《Spring2.0技术手册_林信良》是一本深入探讨Spring 2.0框架的权威指南,由知名IT专家林信良编写。这本书详细介绍了Spring框架的核心概念、设计原则以及实际应用,对于想要深入了解和掌握Spring 2.0的开发者来说,是...
本学习提纲旨在为初学者提供一份详尽的Spring 2.0学习指南,帮助他们系统地掌握这个框架的核心概念和技术。 一、Spring概述 1. Spring框架介绍:理解Spring的起源,目标及主要功能,包括简化Java EE开发、提供容器...
《Spring 2.0 学习源码》是开发者们深入理解Spring框架核心机制的重要参考资料。这个压缩包包含了Spring 2.0版本的源代码,为程序员提供了宝贵的探索与学习平台。Spring作为Java领域的主流框架,其2.0版本是一个重要...
通过《Spring2.0技术手册高清完整版》,开发者可以深入理解Spring 2.0框架的各个方面,无论是在概念层面还是实践操作上,都能获得丰富的指导。虽然手册是繁体版,但对于有经验的开发者来说,理解并不会构成障碍,...
### Spring 2.0 技术手册核心知识点详解 #### 一、Spring 框架简介 Spring 是一个开源框架,最初由 Rod Johnson 创建。它是一个轻量级的控制反转(IoC)容器,用于简化 Java 应用程序的开发。Spring 2.0 版本...
总之,Spring 2.0中文API CHM文件是学习和使用Spring 2.0框架的重要资源。通过深入研究这个文档,开发者能够全面了解Spring的各种功能,提升自己的开发技能,更好地应对复杂的Java应用开发挑战。