Spring配置事務

勿在浮沙築高臺LS發表於2017-01-04
<?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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"></property>
        <property name="username" value="SUNXUN"></property>
        <property name="password" value="123"></property>
    </bean>

    <!-- 
        還要單獨配置一個jdbcTemplate這個<bean>,為了注入到DAOImpl中.
    -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>

    <bean id="newsDAOImpl" class="org.liky.dao.impl.NewsDAOImpl">
        <property name="jdbcTemplate">
            <ref bean="jdbcTemplate" />
        </property>
    </bean>

    <bean id="newsServiceImpl" class="org.liky.service.impl.NewsServiceImpl">
        <property name="newsdao">
            <ref bean="newsDAOImpl" />
        </property>
    </bean>

    <!-- 
        宣告一個用來規範格式的<bean>
    -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>

    <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <!-- 
            配置事務處理的方法和方式
        -->
        <property name="transactionAttributes">
            <props>
                <!--
                    表示所有方法都要關閉連線,並進行事務處理.
                    PROPAGATION_REQUIRED:如果之前有事務,則將當前操作合併到之前的事務中,如果之前沒有事務,則開始一個新的事務。
                    PROPAGATION_REQUIRED_NEW:無論之前是否有事務,都開始一個新的事務。
                    PROPAGATION_REQUIRED_NEVER:不使用事務處理,使用自動提交方式。
                -->
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>*ServiceImpl</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>


</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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" 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/context 
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    ">

    <!-- c3p0資料庫連線池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
        <!-- 資料庫基本資訊配置 -->
        <property name="url" value="jdbc:oracle:thin:@192.168.0.40:1521:ORCL" />
        <property name="username" value="LS" />
        <property name="password" value="LS" />
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <bean id="pathWayDmDaoImp" class="com.winning.dm.test.dao.PathWayDmDaoImp">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <bean id="pathWayDao" class="com.winning.dm.test.dao.PathWayDao">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <bean id="pathWayDaoImp" class="com.winning.dm.test.dao.PathWayDaoImp">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    <bean id="pathWayService" class="com.winning.dm.test.service.PathWayService">
        <property name="pathWayDmDaoImp" ref="pathWayDmDaoImp"></property>
        <property name="pathWayDaoImp" ref="pathWayDaoImp"></property>
    </bean>

    <bean id="testSessionService" class="com.winning.dm.test.service.TestSessionService">
        <property name="pathWayDao" ref="pathWayDao"></property>
    </bean>
    <!-- <context:annotation-config></context:annotation-config> <context:component-scan 
        base-package="com.winning"></context:component-scan> -->
    <!-- 宣告一個用來規範格式的<bean> -->
    <!-- 宣告一個用來規範格式的<bean> -->
    <!-- 事務管理模組 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <aop:config>
        <aop:pointcut id="defaultServicePointcut"
            expression="execution(* dm.test.service.*SessionService.*(..))" />
        <aop:advisor pointcut-ref="defaultServicePointcut"
            advice-ref="defaultServiceAdvice" />
    </aop:config>
    <tx:advice id="defaultServiceAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" rollback-for="Throwable" />
            <tx:method name="*" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>

</beans>
    <!-- 配置宣告式事務管理(採用註解的方式) -->



<bean class="org.springframework.orm.hibernate3.HibernateTransactionManager" id="txManager">

<property name="sessionFactory" ref="sessionFactory"/>

</bean>

<tx:annotation-driven transaction-manager="txManager"/>

相關文章