如何解决@Primary 数据源未在测试中获取
我只想使用@DataJpaTest 测试持久层,并且我有两个数据源配置,一个在 src/main 中,另一个是 src/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...
}
}
src/测试配置
@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() {
}
}
解决方法
@AutoConfigureTestDatabase 的目的是将 src/main/.. 中定义的现有数据源替换为 src/test 中定义的数据源。但是要这样做,您必须通知它必须使用什么策略。您选择了 AutoConfigureTestDatabase.Replace.NONE
,因此它不会用您需要的数据源替换主数据源。
尝试切换到 AutoConfigureTestDatabase.Replace.ANY
,它会正确地将其替换为测试中定义的那个。
你也可能在文档中展示了这一点
在多个DataSource bean的情况下,只有@Primary 数据源被考虑。
这适用于您在项目中定义了多个数据源的情况。这意味着它将仅替换具有定义策略的主数据源。这并不意味着它会只选择主要的而忽略其他的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。