在Spring DataJpaTest中禁用生产数据源自动配置

时间:2018-06-01 21:48:56

标签: spring spring-boot spring-data-jpa integration-testing datasource

在我的application.yml中,我有以下配置(能够使用docker / docker-compose在不同环境中自定义变量):

spring:
  datasource:
    url: ${SPRING_DATASOURCE_URL}
    username: ${SPRING_DATASOURCE_USERNAME}
    password: ${SPRING_DATASOURCE_PASSWORD}

问题是Spring在@DataJpaTest时尝试自动配置这个数据源,所以使用嵌入式H2数据库,显然它不喜欢占位符....

我试图排除一些自动配置:

@DataJpaTest(excludeAutoConfiguration = 
               {DataSourceAutoConfiguration.class, 
                DataSourceTransactionManagerAutoConfiguration.class, 
                HibernateJpaAutoConfiguration.class})

但是,没有任何作用,缺少entityManagerFactory,......

我可能会使用配置文件,但如果可能的话,我更喜欢另一种解决方案。

1 个答案:

答案 0 :(得分:0)

您是否尝试过定义自己的数据源bean?

@Import(JpaTestConfiguration.class)
@DataJpaTest
@Configuration
public class JpaTestConfiguration{
//...
@Bean
public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }
//...
}