Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring @测试中未拾取主数据源_Spring_Spring Boot_Testing_Junit4_Junit5 - Fatal编程技术网

Spring @测试中未拾取主数据源

Spring @测试中未拾取主数据源,spring,spring-boot,testing,junit4,junit5,Spring,Spring Boot,Testing,Junit4,Junit5,我只想使用@DataJpaTest测试持久层,我有两个数据源配置,一个在src/main中,另一个在src/test中,我只在test数据源上使用@primary来获取数据,但也获取主数据源 src/主配置 @Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackages = "com.****.repository", entityManagerFactoryRef

我只想使用@DataJpaTest测试持久层,我有两个数据源配置,一个在src/main中,另一个在src/test中,我只在test数据源上使用@primary来获取数据,但也获取主数据源

src/主配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.****.repository",
        entityManagerFactoryRef = "platformEntityManagerFactory",
        transactionManagerRef = "platformTransactionManager"
)
@Import(CommonPersistenceConfig.class)
public class PlatformPersistenceConfig {

    @Value("classpath:application.yml")
    private Resource resource;

    @Bean
    @Qualifier("platformTransactionManager")
    public PlatformTransactionManager platformTransactionManager(@Qualifier("platformEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        // code...
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean platformEntityManagerFactory(DataSource dataSource,
                                                                               HibernateProperties hibernateProperties) {
        // code...
    }

    @Bean
    public DataSource getDataSource() throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        // code...
    }

}
@Configuration
@Import({CommonPersistenceConfig.class, DbPropertyConfig.class})
public class DbTestSetupConfig {

    @Autowired
    private TestDatasourceProperties dbProperties;

    @Primary
    @Bean(destroyMethod = "close")
    public DataSource getDataSource() throws Exception {
        // code...
    }


    @PostConstruct
    public void dbSetup() throws Exception {
        // code...
    }

}
src/测试配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.****.repository",
        entityManagerFactoryRef = "platformEntityManagerFactory",
        transactionManagerRef = "platformTransactionManager"
)
@Import(CommonPersistenceConfig.class)
public class PlatformPersistenceConfig {

    @Value("classpath:application.yml")
    private Resource resource;

    @Bean
    @Qualifier("platformTransactionManager")
    public PlatformTransactionManager platformTransactionManager(@Qualifier("platformEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        // code...
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean platformEntityManagerFactory(DataSource dataSource,
                                                                               HibernateProperties hibernateProperties) {
        // code...
    }

    @Bean
    public DataSource getDataSource() throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        // code...
    }

}
@Configuration
@Import({CommonPersistenceConfig.class, DbPropertyConfig.class})
public class DbTestSetupConfig {

    @Autowired
    private TestDatasourceProperties dbProperties;

    @Primary
    @Bean(destroyMethod = "close")
    public DataSource getDataSource() throws Exception {
        // code...
    }


    @PostConstruct
    public void dbSetup() throws Exception {
        // code...
    }

}
我的测试

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class StripeCardRepositoryTest {

    @Autowired
    StripeCardRepository stripeCardRepository;

    @Test
    public void test() {
 
    }
}
其要点是替换src/main/中定义的现有数据源。。使用src/test中定义的数据源。但要做到这一点,你必须告诉它必须使用什么策略。您选择了
AutoConfigureTestDatabase.Replace.NONE
,因此它不会将主数据源替换为您需要的数据源

尝试切换到
AutoConfigureTestDatabase.Replace.ANY
,它将正确地将其替换为测试中定义的数据库

也可能在文档中显示了这一点

对于多个数据源bean,只有@Primary 考虑了数据源


这适用于在项目中定义了多个数据源的情况。这意味着它将仅用定义的策略替换主数据源。这并不意味着它将只选择主数据库而忽略其他数据库。

切换到任何后,它会给我错误“无法将数据源替换为用于测试的嵌入式数据库”您想做什么?你们有docker集装箱或类似的东西吗?为什么需要替换数据源?我有一个用于生产的数据库和另一个用于测试的数据库,分别是
@AutoConfigureTestDatabase(replace=AutoConfigureTestDatabase.replace.ANY,connection=EmbeddedDatabaseConnection.NONE)
@Boung实际上问题是通过@ContextConfiguration(classes=DbTestSetupConfig.class)解决的