spring3 几种事务配置方式

第一种方式:
<bean id="dataSource" class="....">
    ......
</bean>
<!-- transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- enable autowire -->
    <context:annotation-config />
    <!-- enable transaction demarcation with annotations -->
    <tx:annotation-driven />
使用:
@Transactional(xxxxxxx)
public void insertOrder(Order order) {
     ......

这样搞的话比较方便,在想用的地方加上@Transactional 就行了
第二种方式:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass">
			<value>${datasource.driverClassName}</value>
		</property>

		<property name="jdbcUrl">
			<value>${datasource.url}</value>
		</property>
		<property name="user">
			<value>${datasource.username}</value>
		</property>
		<property name="password">
			<value>${datasource.password}</value>
		</property>

		<property name="minPoolSize">
			<value>${c3p0.minPoolSize}</value>
		</property>

		<property name="maxPoolSize">
			<value>${c3p0.maxPoolSize}</value>
		</property>

		<property name="maxIdleTime">
			<value>${c3p0.maxIdleTime}</value>
		</property>

		<property name="acquireIncrement">
			<value>${c3p0.acquireIncrement}</value>
		</property>
		<property name="maxStatements">
			<value>${c3p0.maxStatements}</value>
		</property>
		<property name="initialPoolSize">
			<value>${c3p0.initialPoolSize}</value>
		</property>

		<property name="idleConnectionTestPeriod">
			<value>${c3p0.idleConnectionTestPeriod}</value>
		</property>

		<property name="numHelperThreads">
			<value>${c3p0.numHelperThreads}</value>
		</property>

		<property name="acquireRetryAttempts">
			<value>${c3p0.acquireRetryAttempts}</value>
		</property>

		<property name="breakAfterAcquireFailure">
			<value>${c3p0.breakAfterAcquireFailure}</value>
		</property>
		<property name="testConnectionOnCheckout">
			<value>${c3p0.testConnectionOnCheckout}</value>
		</property>
	</bean>

	<!--
		读取ibatis配置文件
		 <bean id="sqlMapClient"
		class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="dataSource" ref="dataSource" /> <property
		name="configLocation" value="/WEB-INF/conf/SqlMapConfig.xml" />
		</bean>
	-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations"
			value="classpath:mappers/**/*.xml" />
		
	</bean>

	<!-- ############################## -->
	<!-- 事务的定义 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
	</bean>
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager" ref="transactionManager" />
		<property name="transactionAttributes">
			<props>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="change*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>
	<!-- 定义BeanNameAutoProxyCreator -->
	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<!-- 指定满足哪些bean自动生成业务代理 -->
		<property name="beanNames">
			<!-- 需要自动创建事务代理的bean -->
			<value>*Service</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>


这种方式,要符合上面的潜规则

猜你喜欢

转载自catastiger.iteye.com/blog/1147202
今日推荐