`

Spring中的事物管理

阅读更多
1.Spring中用硬编码的方式进行事物管理
在需要应用事物的类中引入
private TransactionTemplate transactionTemplate;

public TransactionTemplate getTransactionTemplate() {
     return transactionTemplate;
}

public void setTransactionManager(PlatformTransactionManager transactionManger) {
     this.transactionTemplate = new TransactionTemplate(transactionManger);
	}


spring的配置文件:
	<!-- 当为jdbc时 -->
	<bean id="JtransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

         <!--当为hibernate时 -->
	<bean id="HtransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="dataSource" ref="dataSource" />
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 在需要事物管理的地方注入transactionManager -->
	<bean id="service" class="com.ozzzo.test.service.TestService">
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
		<property name="dao">
			<ref bean="testDAO"/>
		</property>	
	</bean>


在方法中调用:
	transactionTemplate.execute(new TransactionCallback(){
			public Object doInTransaction(TransactionStatus arg0) {
				try{
				   //业务代码
				}catch (Exception e) {
					arg0.setRollbackOnly();
				}
				return null;
			}
			
		});


2.通过配置文件管理事务
	<!-- 配置式事物管理 -->
	<bean id="proxyTest" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
		<property name="target">			<!-- 目标对象,需要引入事物管理的类 -->
			<ref bean="service"/>
		</property>
		<property name="proxyTargetClass" value="true"></property>  
		<property name="transactionAttributes">     
			<props>                          <!-- 类中需要引入事物管理的方法 -->        
				<prop key="add*">PROPAGATION_REQUIRED</prop>   <!-- 事物级别 -->
			</props>
		</property>
	</bean>

在需要调用service的地方 用proxyTest替换.即可引入事物
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics