Я работаю над приложением Spring Boot, и мне нужно реализовать условный компонент на основе поставщика БД. Проблема в том, что когда я пытаюсь получить свойство с тегом @Value, я получаю нулевое значение.
Я пытался создать другой класс или пометить класс extends Condition
с помощью @ Component / @ Services, но он не работает либо
@Component
public class PostgreSQLProviderCondition implements Condition{
@Value("${spring.datasource.url}")
private String dbConnectionString;
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return dbConnectionString.contains("postgresql"); //Null pointer exception :c
}
}
Я также пытался создать новый класс со всеми свойствами, но когда я делаю @Autowired
, я тоже получаю ноль.
Вот реализация класса config:
@Configuration
public class SQLProviderConfiguration{
@Bean
@Conditional(PostgreSQLProviderCondition.class)
public IFilingNumberSQLProvider filingProviderPostgreSQL() {
return new FilingNumberSQLProviderPostgreSQL();
}
@Bean
@Conditional(SQLServerProviderCondition.class)
public IFilingNumberSQLProvider filingProviderSQLServer() {
return new FilingNumberSQLProviderSQLServer();
}
}
И файл конфигурации boostrap.yml выглядит так:
spring:
profiles: offline
cloud:
config:
enabled: false
jmx:
default-domain: ****
datasource:
url: ****
username: ****
password: ****
hikari:
pool-name: *****
jpa:
hibernate.ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
temp.use_jdbc_metadata_defaults: false
default_schema: msa_data
current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext
generate-ddl: true