Spring事物配置的几种方式

    技术2025-09-06  95

     

    Spring的事物管理分为声明式的事物管理和编程式的事物管理,常用的是声明式的事物管理,有以下几种方式。

     

     

    <?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:context="http://www.springframework.org/schema/context" 

        xmlns:aop="http://www.springframework.org/schema/aop" 

        xsi:schemaLocation="http://www.springframework.org/schema/beans  

               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

               http://www.springframework.org/schema/context  

               http://www.springframework.org/schema/context/spring-context-2.5.xsd  

               http://www.springframework.org/schema/aop                                        

      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 

     

    <!-- Datasource -->

    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName">

    <value>com.ibm.db2.jcc.DB2Driver</value>

    </property>

    <property name="url">

    <value>jdbc:db2://9.186.62.192:50001/DB</value>

    </property>

    <property name="username">

    <value>username</value>

    </property>

    <property name="password">

    <value>password</value>

    </property>

    </bean>

        <!-- transaction manager -->   

        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <property name="dataSource" ref="myDataSource"/>

    </bean>

    <!------------------------------------------------------------------------------------------------------------------------>

        <!-- config 1 --> 

    <bean id="PageFlowService" class="com.service.impl.PageFlowService">

    <property name="pageFlowDAO" ref="PageFlowDAO" />

    <property name="flowNodeDAO" ref="FlowNodeDAO" />

    </bean>

    <bean id="PageFlowProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" singleton="false">

    <!--  --> 

    <property name="transactionManager" ref="dataSourceTransactionManager" />

    <property name="target" ref="PageFlowService" />

    <!--  -->

    <property name="transactionAttributes">

    <props>

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

    </props>

    </property>

    </bean>

    <!------------------------------------------------------------------------------------------------------------------------>

    <!-- config 2 -->

        <bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">   

            <!--  -->   

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

            <!--  -->   

            <property name="transactionAttributes">   

                <props>   

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

                </props>   

            </property>   

        </bean> 

        <bean id="pageFlowServiceTarget" class="com.service.impl.PageFlowService"> 

            <property name="pageFlowDAO" ref="PageFlowDAO" />

    <property name="flowNodeDAO" ref="FlowNodeDAO" />

        </bean> 

        <bean id="pageFlowService" parent="transactionBase" >   

            <property name="target" ref="pageFlowServiceTarget" />    

        </bean> 

    <!------------------------------------------------------------------------------------------------------------------------>

    <!-- config 3 -->

    <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> 

        <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   

            <property name="beanNames">   

                <list>   

                    <value>*Service</value> 

                </list>   

            </property>   

            <property name="interceptorNames">   

                <list>   

                    <value>transactionInterceptor</value>   

                </list>   

            </property>   

        </bean>   

        <bean id="PageFlowService" class="com.service.impl.PageFlowService" singleton="false">

    <property name="pageFlowDAO" ref="PageFlowDAO" />

    <property name="flowNodeDAO" ref="FlowNodeDAO" />

    </bean>

    <!------------------------------------------------------------------------------------------------------------------------>

    <!--config 4 -->

    <tx:advice id="txAdvice" transaction-manager="transactionManager"> 

            <tx:attributes> 

                <tx:method name="*" propagation="REQUIRED" /> 

            </tx:attributes> 

        </tx:advice> 

        <aop:config> 

            <aop:advisor pointcut="execution(* com.service..*Service.*(..))" advice-ref="txAdvice"/>         

        </aop:config> 

    </beans> 

     

     

    最新回复(0)