With spring boot + spring data jdbc i have to wire the DataSource
bean by myself. Like so:
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(this.environment.getRequiredProperty("url"));
hikariConfig.setUsername("user");
hikariConfig.setDriverClassName("org.postgresql.Driver");
hikariConfig.setPassword("password");
return new HikariDataSource(hikariConfig);
}
When i want to use testcontainers for my tests i have to declare a DataSource
bean as well:
@Bean
@Primary
DataSource testDataSource() {
if (POSTGRESQL_CONTAINER == null) {
PostgreSQLContainer<?> container = new PostgreSQLContainer<>(DockerImageName.parse("postgres").withTag("9.6.12"));
container.withInitScript("schema.sql");
container.start();
POSTGRESQL_CONTAINER = container;
}
PGSimpleDataSource dataSource = new PGSimpleDataSource();
dataSource.setUrl(POSTGRESQL_CONTAINER.getJdbcUrl());
dataSource.setUser(POSTGRESQL_CONTAINER.getUsername());
dataSource.setPassword(POSTGRESQL_CONTAINER.getPassword());
return dataSource;
}
Using my tests with SpringBootTest
i have to ComponentScan
nearly all packages because i don´t want to mock all other beans.
So my question is:
Can i somehow exclude the main DataSource
only for test cases?
(My current workaround is to define the test DataSource
as Primary
)
But nevertheless i have two DataSource
beans in my Context
even if i only need one.