如何将@DataJpaTest 与多个数据源一起使用

Mik*_*ail 6 spring-boot

我尝试使用注释 @DataJpaTest 编写集成测试。我有两个数据源:主要和次要(类配置)结果我有一个错误:

expected single matching bean but found 2: primaryDataSource,secondary
Run Code Online (Sandbox Code Playgroud)

然后我尝试添加注释

@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.AUTO_CONFIGURED)
Run Code Online (Sandbox Code Playgroud)

并且使用 AUTO_CONFIGURED 只有由属性配置的数据源将被替换,但我看到的是嵌入的 h2 Dialect : HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect

如何使用@DataJpaTest多个数据源?

public class DataSourcesConfig {


    @Bean
    @Primary
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "secondary")
    @ConfigurationProperties(prefix="datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

}
Run Code Online (Sandbox Code Playgroud)

Gre*_*ant 0

在这里找到了可能的解决方案。

\n\n

基本上,您可以手动适当地配置 H2 数据库,而不是让 Spring 自动执行此操作。

\n\n

在 \xe2\x80\x9csrc/test/resources\xe2\x80\x9d 中创建 application.properties 文件,内容如下

\n\n
# Let Spring autodetect the different SQL Dialects of each datasource\nspring.jpa.database=default\n# Generate the DB schema in the In-Memory H2 databases based on the JPA Entities\nspring.jpa.generate-ddl=true\n\n# H2 In-Memory Database "foo" (used in tests instead of a real PostgreSQL DB)\nspring.datasource.url=jdbc:h2:mem:foo;DB_CLOSE_ON_EXIT=FALSE\nspring.datasource.username=sa\nspring.datasource.password=\nspring.datasource.driver-class-name=org.h2.Driver\n\n# H2 In-Memory Database "bar" (used in tests instead of a real PostgreSQL DB)\nbar.datasource.url=jdbc:h2:mem:bar;DB_CLOSE_ON_EXIT=FALSE\nbar.datasource.username=sa\nbar.datasource.password=\nbar.datasource.driver-class-name=org.h2.Driver\n
Run Code Online (Sandbox Code Playgroud)\n