我有一个JUnit测试方法,它调用两个不同的服务,两个服务都运行不同的数据源,当然还有两个事务管理器。
所以我已经将Flyway配置为使用H2数据库并实现了如下的JUnit测试方法。
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class DataControllerTest extends BaseIntegrationTest {
@Test
public void testDataSave() throws Exception {
// test code to call controller which internally calls two services.
assertEquals(1, JdbcTestUtils.countRowsInTable(this.jdbcTemplate, "Database1Table1"));
assertEquals(1, JdbcTestUtils.countRowsInTable(this.anotherjdbcTemplate, "Database2Table1"));
}
}
所以我的问题是这个测试方法是在H2数据库中创建一些记录,我想在运行此测试后清除该数据。
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource1" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
和其他处理不同数据源的事务管理器配置如下。
<bean id="txManager2"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="anotherDataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
由于我将此测试类作为Transactional,它将在每个测试方法运行后清理数据库。 但目前只清除一个数据库。但我想清理另一个数据库,它是anotherDatasource的一部分。
我如何继续这样做..? 如果可能,如何在@Transactional注释中提及这两个事务管理器。