方法一:
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="30" />
<property name="minPoolSize" value="10" />
<!-- 關(guān)閉連接不自動commit -->
<property name="autoCommitOnClose" value="false" />
<!-- 連接超時時間 -->
<property name="checkoutTimeout" value="10000" />
<!-- 連接失敗重試次數(shù) -->
<property name="acquireRetryAttempts" value="2" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="pooledDataSource" />
</bean>
<!-- 配置基于注解的聲明式事務(wù)枪萄,默認(rèn)使用注解來管理事務(wù)行為 -->
<tx:annotation-driven transaction-manager="transactionManager" mode="proxy"
proxy-target-class="false"/>
方法二:
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.jdbcUrl}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="maxPoolSize" value="30" />
<property name="minPoolSize" value="10" />
<!-- 關(guān)閉連接不自動commit -->
<property name="autoCommitOnClose" value="false" />
<!-- 連接超時時間 -->
<property name="checkoutTimeout" value="10000" />
<!-- 連接失敗重試次數(shù) -->
<property name="acquireRetryAttempts" value="2" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="pooledDataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--定義查詢方法都是只讀的 -->
<tx:method name="query*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<!-- 主庫執(zhí)行操作隐岛,事務(wù)傳播行為定義為默認(rèn)行為 -->
<tx:method name="save*" propagation="REQUIRED"? />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<!--其他方法使用默認(rèn)事務(wù)策略 -->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 定義切面,所有的service的所有方法 -->
<aop:pointcut id="txPointcut"
? ? ? ? ? ? expression="execution(* com.json.web.service.impl.*.*(..))" />
<!-- 應(yīng)用事務(wù)策略到Service切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>