`
liu_jiaqiang
  • 浏览: 20691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring 事物

    博客分类:
  • java
 
阅读更多
千山我独行,不必相送...
Angi For Ever
Spring管理iBatis事务

<sqlMapConfig>
    <sqlMap resource="com/angi/ibatis/maps/User.xml" />
</sqlMapConfig>
以上配置省去了transactionManager的配置,就会使用external(外部)事务管理(ExternalTransaction),即等同如下配置:
复制代码
<sqlMapConfig>
    <transactionManager type="EXTERNAL">
                <!--这个数据源其实没有什么意义,还是取上面的省略方式吧-->
        <dataSource type="DBCP">
        </dataSource>
    </transactionManager>
    <sqlMap resource="com/angi/ibatis/maps/User.xml" />
</sqlMapConfig>
复制代码
1、TransactionProxyFactoryBean
复制代码
<?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    <!-- DataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <!--<property name="defaultAutoCommit" value="false"/>-->
        <property name="url">
            <value>jdbc:mysql://localhost/test</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>mysql</value>
        </property>
    </bean>
    <!-- Spring iBatis Template -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="SqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
    </bean>
    <bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient" />
        </property>
    </bean>
    <bean id="userService" class="com.angi.ibatis.service.UserService">
        <property name="userDao">
            <ref bean="userDAO" />
        </property>
    </bean>
    <bean id="userServiceProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="target">
            <ref local="userService" />
        </property>
        <property name="transactionAttributes">
            <props>
                <!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
</beans>
复制代码
2、TransactionInterceptor
复制代码
<?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    <!-- DataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <!--<property name="defaultAutoCommit" value="false"/>-->
        <property name="url">
            <value>jdbc:mysql://localhost/test</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>mysql</value>
        </property>
    </bean>
    <!-- Spring iBatis Template -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="SqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
    </bean>
    <bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient" />
        </property>
    </bean>
    <bean id="userService" class="com.angi.ibatis.service.UserService">
        <property name="userDao">
            <ref bean="userDAO" />
        </property>
    </bean>
    <bean
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>userService</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>
    <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
</beans>
复制代码
3、AOP和TX配置
复制代码
<?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    <!-- DataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost/test</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>mysql</value>
        </property>
    </bean>
    <!-- Spring iBatis Template -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="SqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 需要引入aop的命名空间 -->
    <aop:config>
        <!-- 切入点指明了在所有方法产生事务拦截操作 -->
        <aop:pointcut id="serviceMethods"
            expression="execution(* com.angi.ibatis.service.*.*(..))" />
        <!-- 定义了将采用何种拦截操作,这里引用到 txAdvice -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
    </aop:config>
    <!-- 需要引入tx的命名空间 -->
    <!-- 这是事务通知操作,使用的事务管理器引用自 transactionManager -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 指定哪些方法需要加入事务,这里懒惰一下全部加入,可以使用通配符来只加入需要的方法 -->
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    <bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient" />
        </property>
    </bean>
    <bean id="userService" class="com.angi.ibatis.service.UserService">
        <property name="userDao">
            <ref bean="userDAO" />
        </property>
    </bean>
</beans>
复制代码
4、anotation
复制代码
<?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:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
    <!-- 需要引入tx的命名空间 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    <!-- DataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <!--<property name="defaultAutoCommit" value="false"/>-->
        <property name="url">
            <value>jdbc:mysql://localhost/test</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>mysql</value>
        </property>
    </bean>
    <!-- Spring iBatis Template -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="SqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
    </bean>
    <bean id="userDAO" class="com.angi.ibatis.dao.UserDaoImpl">
        <property name="sqlMapClient">
            <ref bean="sqlMapClient" />
        </property>
    </bean>
    <bean id="userService" class="com.angi.ibatis.service.UserService">
        <property name="userDao">
            <ref bean="userDAO" />
        </property>
    </bean>
</beans>
复制代码
Java代码:
复制代码
@Transactional
    public void doTransaction() {
        User user = new User();
        user.setName("11111");
        user.setSex(1);
        userDao.saveUser(user);
        User user1 = new User();
        user1.setName("Angikkk");
        user1.setSex(1);
        userDao.saveUser(user1);
复制代码
    }

分类: iBatis, Spring
绿色通道: 好文要顶 关注我 收藏该文与我联系
Angi
关注 - 0
粉丝 - 5
+加关注
2 0
(请您对文章做出评价)
» 下一篇:Java安全领域组成部分
posted on 2011-04-07 10:28 Angi 阅读(8142) 评论(0)  编辑 收藏

刷新评论刷新页面返回顶部
(评论功能已被禁用)
博客园首页博问新闻闪存程序员招聘知识库

最新IT新闻:
· 微信群升级:人数允许超100人 需开通微信支付
· 苹果挖豪雅销售总监 为推出iWatch进行准备
· 我们反对无趣!来游戏化吧
· Linux 3.14将是下一个长期支持内核
· 研究发现人类不喜欢独自思考
» 更多新闻...
最新知识库文章:
· 程序员的自我修养(2)——计算机网络
· 你是否中了工程师文化的毒?
· 不安分的工程师
· 流量劫持——浮层登录框的隐患
· Amazon前技术副总裁解剖完美技术面试
» 更多知识库文章...
Powered by:
博客园
Copyright © Angi

导航
管理
搜索


随笔分类
《Java加密与解密的艺术》读书笔记(10)
文章分类
Agile(1)
Android(3)
Architecture(2)
CSS(3)
Database(5)
DB2(19)
Eclipse(9)
Flash(1)
FreeMarker(2)
Hibernate(2)
iBatis(2)
Java EE(10)
Java SE(22)
JavaScript(7)
JBoss(2)
jQuery(3)
LDAP(1)
Linux(5)
Maven(7)
Microsoft(2)
Oracle(1)
POI(1)
Security(15)
Spring(3)
Spring Batch(2)
Spring Batch Admin(4)
Spring Security(7)
SSO(2)
Struts1(2)
Struts2(1)
Tomcat(7)
Web(7)
分享到:
评论

相关推荐

    spring事物代码片段

    spring事物代码片段,包含了定义输入传播性,和参与事物的类

    spring事物的隔离级别

    spring事物的隔离级别,spring对于事物的操作隔离级别分为文档中的几种

    spring事物传播测试表

    本文将深入探讨“Spring事物传播测试表”所涉及的知识点。 首先,理解事务是非常重要的。在数据库操作中,事务确保数据的一致性和完整性。例如,一组相关的数据库操作要么全部成功,要么全部失败,这就是事务的ACID...

    spring事物和rabbitMQ的例子

    在IT行业中,Spring框架是Java应用开发中的基石,尤其在企业级应用中广泛使用。它提供了许多关键功能,包括依赖注入、AOP(面向切面编程)以及事务管理。本示例聚焦于Spring的事务管理和RabbitMQ的使用,这都是...

    spring 事物管理

    spring 事物管理

    Spring事物配置的五种模式

    ### Spring事务配置的五种模式详解 在Spring框架中,事务管理是十分重要的特性之一,它可以帮助开发者确保数据的一致性和完整性。对于不同的业务场景,Spring提供了多种事务配置的方式,以便于灵活应对各种需求。...

    spring事物管理配置的5种方式

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本文将详细介绍Spring事务管理配置的五种方式,帮助你更好地理解和掌握这一关键概念。 首先,Spring事务管理通常涉及三个主要部分: ...

    spring事物

    在IT领域,Spring框架是Java开发中的一个核心组件,尤其在企业级应用中,它扮演着至关重要的角色。Spring事务管理是其核心特性之一,它为应用程序提供了强大的事务控制能力,确保了数据的一致性和完整性。本文将深入...

    spring事物的五种配制方法

    ### Spring事务的五种配置方法详解 #### 一、引言 在软件开发过程中,事务管理是确保数据一致性的重要手段之一。Spring框架提供了强大的事务管理功能,能够方便地与多种数据库交互,支持不同的数据访问技术如JDBC、...

    Spring 事物配置的方式

    Spring 事务配置的五种方式 ,讲述了Sping 事物配置的全过程

    事物简单总结(偏向Spring事物)

    本文主要关注Spring框架中的事务管理,它提供了一种声明式和编程式的事务处理方式,使得开发者能够方便地在应用层面上控制事务。 首先,我们需要理解事务的基本概念。事务是数据库操作的基本单元,它包含一组操作,...

    spring事物管理机制视频

    资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    spring 事物底层原理分析1

    【Spring 事务底层原理分析】 在软件开发中,Spring 框架提供了强大的事务管理功能,使得开发者能够方便地在应用程序中控制事务。本篇主要分析 Spring 事务的底层实现原理,包括数据库事务的基本特性、Spring 对...

    spring事物的7大传播机制,5个隔离机制

    ### Spring事务的七大传播行为 在深入探讨Spring框架下的事务管理之前,我们首先明确事务的概念。事务是指一组操作作为一个整体,要么全部成功,要么全部失败。Spring提供了多种方式来管理和控制事务,其中一种重要...

    spring事物隔离和传播机制

    ### Spring 事务隔离和传播机制详解 #### 一、Spring 事务传播机制 Spring 的事务管理功能非常强大,其中一个重要特性就是事务传播行为。事务传播行为定义了当一个方法调用另一个方法时,如何处理事务边界的问题。...

    Spring事务管理Demo

    在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理应用中的事务。Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何...

    spring事物管理

    在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式处理事务。本篇文章将深入探讨Spring中的五种声明式事务管理方式。 首先,我们需要理解事务的基本概念。事务是一组数据库操作,这些...

    spring 事物总结

    Spring事务管理是Java开发中非常重要的一个概念,它在企业级应用中扮演着核心角色,确保数据的一致性和完整性。Spring提供了多种事务管理方式,包括编程式事务管理和声明式事务管理,以适应不同场景的需求。 1. **...

    spring事物 支持

    Spring框架是Java开发中不可或缺的一部分,特别是在企业级应用中,其强大的事务管理能力使得开发者能够更好地处理数据一致性问题。在Spring中,事务管理是通过一套完善的机制实现的,旨在确保在多步骤操作中数据的...

Global site tag (gtag.js) - Google Analytics