我正在尝试使用 Spring TestContext 框架集成测试我的应用程序。像往常一样,我通过扩展 AbstractTransactionalJUnit4SpringContextTests
来完成此操作。但是,我的应用程序具有三个不同的数据源(名称如 xDataSource、yDataSource、zdataSource),因此当我尝试运行测试时,AbstractTransactionalJUnit4SpringContextTests
中的数据源 Autowiring 将不起作用,因为它查找具有按类型 Autowiring 的数据源,但找到了三个,因此它不知道选择哪一个。
有没有办法让 Spring TestContext Framework 使用三个数据源?如果是这样;怎么办?
最佳答案
好吧,我明白了。这个问题的答案是双重的。首先,扩展 AbstractTransactionalJUnit4SpringContextTests
不起作用。这是因为它需要单个数据源来创建 SimpleJdbcTemplate
,以便在测试中使用简单的 JDBC 查询验证内容。由于我在此测试中没有使用此功能,因此我可以将 extends AbstractTransactionalJUnit4SpringContextTests
替换为以下配置:
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
@Transactional
public class IntegrationTest {
...
}
这些注释的组合提供了与扩展 AbstractTransactionalJUnit4SpringContextTests
相同的设置。
第二部分是了解,由于我有三个数据源,因此我也需要所有三个数据源,因此由同一个 PlatformTransactionManager
引用。我有分布式事务。这对于 DataSourceTransactionManager
来说是不可能的,所以我必须使用 JtaTransactionManager
。
关于java - 如何使 Spring testcontext 框架使用多个数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968629/