I have a library that initializes Datasource with dynamically retrieved credentials. I added @ConditionalOnProperty
annotation to disable this bean with a configuration.
@Configuration
@ConditionalOnProperty(prefix = "datasource", name = "enabled")
@RequiredArgsConstructor
public class DataSourceConfig {
private final SecretsClient secretsClient;
@Value("${datasource.url}")
private String url;
@Value("${datasource.username}")
private String username;
@Value("${datasource.driver-class-name}")
private String driverClassName;
@Bean
@Primary
public DataSource dataSource() throws IOException {
final var dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(dbSecret.get());
return dataSource;
}
}
SecretsClient:
@Service
@ConditionalOnProperty(prefix = "secrets", name = "enabled")
@RequiredArgsConstructor
public class SecretsClient {}
I use this library in a project:
@Configuration
@Profile("!test")
@RequiredArgsConstructor
@ImportAutoConfiguration(classes = {SecretsClient.class, DataSourceConfig.class})
public class LDSConfig {}
and:
datasource:
enabled: false
secrets:
enabled: false
Nevertheless Spring Boot 2.7 initializes SecretsClient
. Is there a way to disable the loading of these classes with properties? I don’t want to comment out @ImportAutoConfiguration
whenever I need to switch the behaviour, I prefer a change in the properties.