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

标签 spring-boot

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

expected single matching bean but found 2: primaryDataSource,secondary

然后我尝试添加注释

@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.AUTO_CONFIGURED)

并且使用AUTO_CONFIGURED,只有由属性配置的数据源将被替换,而是嵌入h2,我看到方言:HHH000400:使用方言: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();
    }

}

最佳答案

我有一个@Primary配置类

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        basePackages = {"com.something"}
)
public class APrimaryDBDBConfiguration {

    @Primary
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Primary
    @Bean(name = "dataSource")
    @ConfigurationProperties("spring.datasource.hikari")
    public HikariDataSource dataSource() {
        return dataSourceProperties()
                .initializeDataSourceBuilder()
                .type(HikariDataSource.class).build();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    @Profile("!test")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder,
            @Qualifier("dataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com")
                .persistenceUnit("some_persistence_unit")
                .build();
    }

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

稍后,在我的存储库测试类中:

@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("test")
@Import(APrimaryDBDBConfiguration.class)

最后,我的测试属性有:

spring.jpa.hibernate.ddl-auto=create-drop

关于spring-boot - 如何将@DataJpaTest与多个数据源一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167811/

相关文章:

authentication - Spring Data REST 中的 CORS 预检请求

java - Spring Boot启动器安全性未进行身份验证

java - graphql-java 和 hibernate - 查询中甚至未指定的延迟加载关系

java - 无效的 JWK 设置 URL : null

spring - 无法通过spring.cloud.config.enabled禁用Spring Cloud Config:false

spring-boot - Spring 启动 2 + Junit 5 : null with @Value

java - 为什么当我尝试将 Spring boot 应用程序推送到 heroku 时它返回 "Fatal error compiling: invalid target release: 11"

spring - 无法自动接线 `WebTestClient` - 没有自动配置

java - 如果发生异常,则记录http请求正文

Spring Boot :Injection of autowired dependencies failed;