Spring 事物

千山我独行,不必相送...
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)