`
ariyue
  • 浏览: 337641 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

spring 事务管理(Transaction) 例子

阅读更多
    传统上, J2EE开发者有两种事务管理选择,全局和本地事务。Spring框架对事务管理的支持极大地改变传统上认为J2EE应用需要应用服务器。这种改变不单是仅仅为了通过EJB来使用生命式事务而使用应用服务器。事实上,即使你的应用服务器有强大的JTA功能,Spring框架的声明式事务提供了比EJB CMT(声明式事务)更强大,更高效的编程模型。一般来说,只有支持多个事务资源,才会需要应用服务器的JTA功能,而大多数应用不需要能够处理跨多种资源。最重要的一点,使用Spring,你可以选择何时把你的应用迁移到全功能的应用服务器。使用Spring不需要像以前一样用编码实现本地事务代替 EJB CMT或JTA,现在只需要改配置问价,而不必改代码。

一. Spring事务管理

  1. Spring 编程式事务管理(programmatic transaction management)
    

   DefaultTransactionDefinition def = new DefaultTransactionDefinition();







TransactionStatus status = transactionManager.getTransaction(def);







try {







JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);







jdbcTemplate.update("INSERT INTO USER VALUES('Spring008', 'caterpillar', 'M', 29)");







jdbcTemplate.update("INSERT INTO USER VALUES('Spring009', 'momor', 'F', 26)");







jdbcTemplate.update("INSERT INTO USER VALUES('Spring010, 'beckyday', 'F', 35)");















} catch (DataAccessException ex) {







transactionManager.rollback(status); // 也可以執行status.setRollbackOnly();







        throw ex;







}







transactionManager.commit(status);















见:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398








  2. Spring宣告式事务管理(declarative transaction management)主要是在spring的配置文件中设置

   

    <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">







<property name="transactionManager">







<ref bean="transactionManager"/>







</property>







<property name="target">







<ref bean="userDAO"/>







</property>







<property name="transactionAttributes">







<props>







<prop key="insert*">PROPAGATION_REQUIRED</prop>







</props>







</property>       







</bean>







见:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2402















二. Spring的@Transcation的例子















1. class 中















@Component //注释就可以将该类定义了 Spring 容器中的 Bean















public Class UserDaoImpl implements IUserDao {















@Override







//标志updateUsers()为Transactional    







@Transactional(







propagation = Propagation.REQUIRED,







isolation = Isolation.DEFAULT,







rollbackFor = Exception.class







)







public void updateUsers(List<User> users){







for(User user :users){







//逻辑







}















}







}















注意: 事务的属性和基本概念







Required : 如果在一个事务中调用,就将该方法加到此事务中,如果没有启动事务,就创建新事务







RequiredNew : 不管当前有没有事务,都启动新事务,如果有,会被挂起,直到此方法结束







NotSupported : 不能在事务中执行此方法,如果有事务,会被挂起,直到此方法结束 







Supports : 如果有当前事务,此方法回加到当前事务,如果没有,容器不会启动新事务







Mandatory : 必须在事务中执行此方法,否则会抛出异常 : TransactionRequiredException







Never : 必须不在事务中调用此方法,否则抛出RemoteException(远程调用)或EJBException(本地调用)

        2.spring配置文件加入:
           .....................
            <tx:annotation-driven/>
          .....................

      注意: webSerivces 是不支持事务的,如果使用事务,必须在下层的Object中实现,例如在Service层或者是Dao层实现。

另外:

http://www.ibm.com/developerworks/cn/java/j-ts1.html

http://www.javaworld.com.tw/confluence/display/opensrc/Spring

http://www.redsaga.com/spring_ref/2.0/html/transaction.html#transaction-declarative
分享到:
评论

相关推荐

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; &lt;!-- 事务拦截器bean需要依赖注入一个事务管理器 --&gt; &lt;!-- 下面定义事务传播属性 [ bus* 事务的方法名]--&gt; *"&gt;...

    spring hibernate mysql 事务实例

    一个简单的spring+hibernate+mysql 事务实例

    Spring2.5_JPA_Transaction_Demo

    这是Spring2.5集成JPA的有关事务的例子,挺实用的哦!

    Transaction.rar

    spring 整合hibernate 事务管理的一个例子 是使用annotation 完成的

    Spring 2.0 开发参考手册

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

    spring.net中文手册在线版

    14.5.1.理解Spring.NET声明式事务管理的实现 14.5.2.第一个例子 14.5.3.Transaction特性的设置 14.5.4.通过AutoProxyCreator使用声明式事务 14.5.5.通过TransactionProxyFactoryObject使用声明式事务 14.5.6. 通过...

    spring chm文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. ...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring API

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    ssh(structs,spring,hibernate)框架中的上传下载

     其中第16行通过类路径的映射方式,将sshfile.model类包目录下的所有领域对象的映射文件装载进来,在本文的例子里,它将装载进Tfile.hbm.xml映射文件。如果有多个映射文件需要声明,使用类路径映射方式显然比直接...

    Activiti6.0教程例子下载

    至于与Spring的集成,一定要熟悉基于Spring配置Activiti,以及事务的处理。 3. 入门示例(参考手册中10分钟教程) 3.1. 概述 下面开始编写一个示例。这个Demo为一个“月度报表申请”流程。由“sales(销售)”组的...

Global site tag (gtag.js) - Google Analytics