@ Условие проблемы получения значений свойств - PullRequest
0 голосов
/ 08 июля 2019

Я работаю над приложением 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

1 Ответ

2 голосов
/ 09 июля 2019

Это не дает прямого ответа на ваш вопрос, но я считаю, что это решает основополагающее требование.

Вы можете использовать @ConditionalOnExpression, чтобы применить конфигурацию только в том случае, если допустимый SpEL. Для вашего случая вы можете иметь:

@ConditionalOnExpression("'${spring.datasource.url}'.contains('postgresql')")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...