<bean
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
  <property name="ignoreResourceNotFound" value="false" />
  <property name="ignoreUnresolvablePlaceholders" value="true" />
  <property name="locations">
   <list>
    <value>classpath:testapplication/config.properties</value>
   </list>
  </property>
 </bean>

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
   <value>${jdbc.driverClassName}</value>
  </property>
  <property name="url">
   <value>${jdbc.url}</value>
  </property>
  <property name="username">
   <value>${jdbc.username}</value>
  </property>
  <property name="password">
   <value>${jdbc.password}</value>
  </property>
  <property name="maxActive">
   <value>${jdbc.maxActive}</value>
  </property>
  <property name="maxIdle">
   <value>${jdbc.maxIdle}</value>
  </property>
  <property name="initialSize">
   <value>${jdbc.maxIdle}</value>
  </property>
  <property name="maxWait">
   <value>18000</value>
  </property>
  <property name="defaultAutoCommit">
   <value>false</value>
  </property>
 </bean>
 <!-- 事务管理器配置,单数据源事务 -->
 <bean id="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
 </bean>
 
  之所以单独把单元测试的基础Spring配置抽出来是因为这里注入的数据源和事务管理器,都用简单的单数据库事务,简化单元测试的环境。避免实际开发中多数据源事务的问题影响结果。

  (2)使用Unitils的Spring启动替换功能,将Spring中的正常的DataSource换为Unitils自身的DataSource。这样做的好处是数据准备的操作和业务sql在一个事务中进行,可以方便一起回滚,不对数据库造成影响。替换的DataSource也是一个Spring配置文件,放到test/resources/testapplication/testDataSource.xml中。

  Java代码