一.spring設定檔
這裡使用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:tx="http://www.springframework.org/schema/tx"
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/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire="byName" default-lazy-init="true">
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialSize" value="${jdbc.initialSize}" />
<property name="maxActive" value="${jdbc.maxActive}" />
<property name="maxIdle" value="${jdbc.maxIdle}" />
<property name="minIdle" value="${jdbc.minIdle}" />
<property name="maxWait" value="${jdbc.maxWait}" />
</bean>
<!-- 設定transactionManager -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--啟動spring註解功能-->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
說明:
1.如果交易管理員的id是transactionManager,這裡可以不對transaction-manager進行配置,即<tx:annotation-driven />就可以。
2.這個配置是告訴spring在類(介面)層面或者方法層面上檢查應用程式上下文中的所有標準了@Transactional的bean,spring將自動把事務通知的內容通知給它。
3.這個通知的事務參數將由@Transactional注釋的參數來定義。
4.如果注釋的是介面,則該介面的所有實作類別都將被事務化。
二.使用@Transactional標註bean
package com.netqin.bbs.initUserData;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.netqin.bbs.initUserData.service.InitUserDataService;
import com.netqin.bbs.utils.Constant;
import com.netqin.bbs.utils.ReadFileUtil;
@Transactional(propagation=Propagation.SUPPORTS,readOnly=true)//設定預設的交易管理策略,即沒有標註@Transactional的方法的交易處理方式,意思為不要求方法必須在一個事務中運行
public class InitUserData {
/**
* 描述 :使用方法上聲明的交易管理策略,這裡的意思為需要在一個事務中運行. <br>
*<p>
*/
@Transactional(propagation=Propagation.REQUIRED,readOnly=false)
public void method1(){
……………………
……………………
}
/**
* 描述 : 使用預設策略. <br>
*<p>
*/
public void method2(){
……………………
……………………
}
}
記得要將這個bean加入到spring上下文中。
一般來說,上述兩種事務策略就可以滿足要求了,不過需要注意,註解功能的使用需要在項目中加入cglib-nodep-x.x_x.jar