java - 如何使 Spring testcontext 框架使用多个数据源?

标签 java unit-testing spring integration-testing spring-test

我正在尝试使用 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/

相关文章:

java - 不带参数的继承构造函数

java - 使用 MVC Java 创建简单的示例

ios - 有没有办法使用 XCTest 对 Touch Id 进行单元测试?

java - 模拟 Apache Commons CSV CSVRecord

java - Spring @RestController 注释,带有来自 beans.xml 的根上下文

Java Spring boot 2.0.5 MultipartFile上传 "Content type not supported"

java - 保护应用程序中的 Web 服务

c# - 对使用文件系统的类进行单元测试

java - Spring boot logging.file 不起作用

java - 从 URL 正则表达式 java 中提取数字