Нужны свойства в классе конфигурации - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть весенняя загрузка приложения и файла application.properties в папке ресурсов. Мне нужны некоторые свойства в классе конфигурации. Я не могу использовать getClass().getClassLoader().getResourceAsStream(), потому что нулевой указатель. Как получить свойства в классе конфигурации? Класс свойства:

@Configuration
@PropertySource("classpath:application.properties")
public class AppProperties {
    @Value("${server.ssl.key-store}")
    private String serverSSLKeyStore;

    @Value("${server.ssl.trust-store}")
    private String serverSSLTrustStore;

    @Value("${server.ssl.key-store-password}")
    private String serverSSLKeyStorePwd;

    @Value("${server.ssl.trust-store-password}")
    private String serverSSLTrustStorePwd;

    @Value("${rabo.api.url}")
    private String raboApiUrl;

    @Value("${tpp.certificate}")
    private String TPPCertificate;

    @Value("${rabo.client.id}")
    private String raboClientId;

    @Value("${rabo.key.id}")
    private String raboKeyId;

    @Value("${rabo.private.key}")
    private String raboPrivateKey;

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        propertySourcesPlaceholderConfigurer.setLocation(new ClassPathResource("application.properties"));
        return propertySourcesPlaceholderConfigurer;

    }
// Getters

}

Класс конфигурации:

@Configuration
public class RetrofitConfiguration {
    private static final Logger LOG = LoggerFactory.getLogger(RetrofitConfiguration.class);

    @Bean
    SSLTrustManagerHelper provideSSLTrustManagerHelper(AppProperties properties) {
        try {
            LOG.error(properties.getServerSSLKeyStore()); // PRINTS NULL
            InputStream keystore = new FileInputStream(properties.getServerSSLKeyStore());
            InputStream truststore = new FileInputStream(properties.getServerSSLTrustStore());
            String keystorePwd = properties.getServerSSLKeyStorePwd();
            String truststorePwd = properties.getServerSSLTrustStorePwd();
            SSLTrustManagerHelper ssl = null;
            try {
                ssl = new SSLTrustManagerHelper(keystore, keystorePwd, truststore, truststorePwd);
            } catch (Exception e) {
                LOG.error("error occured while creating ssl trust manager helper!", e);
            }
            return ssl;
        } catch (FileNotFoundException e) {
            LOG.error("file not found ", e);
            return null;
        }
    }

// Other config
}

Класс AppProperties создан, но свойства возвращают ноль.

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Что вы хотите сделать, это установить @ConfigurationProperties, а не источник свойства. Эта функция Spring Boot позволяет считывать свойства в POJO, которые можно использовать в другом месте кода.

Таким образом, свойства AppProperties будут выглядеть примерно так:

@Configuration
@ConfigurationProperties
class AppProperties {
   private String serverSSLKeyStore;
   // the other properties

   public void setServerSslKeyStore(String value) {
     this.serverSSLKeyStore = value;
   }

   public String getServerSslKeyStore() {
     return this.serverSSLKeyStore;
   }
}

Каждое поле должно иметь соответствующий свойство с тем же именем в файле application.properties. Обратите внимание, что каждое поле должно иметь методы getter и setter, чтобы это работало.

Затем вы можете инициализировать его в загрузочном приложении Spring, используя:

@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class) // not needed in later spring version
class MyApplication {
   public static void main(String[] args) {
      SpringApplication.run(MyApplication.class, args);
   }
}
1 голос
/ 19 февраля 2020

Есть несколько изменений, которые можно сделать

  1. Удалить компонент propertyConfigInDev
  2. Если не определен переопределенный путь (файла свойств), тогда вы не сможете требуют @PropertySource("classpath:application.properties"), вы также можете пропустить эту строку кода
  3. Вы можете использовать @Value непосредственно в RetrofitConfiguration класс, как показано ниже


@Configuration
public class RetrofitConfiguration {
   private static final Logger LOG = LoggerFactory.getLogger(RetrofitConfiguration.class);

@Value("${server.ssl.trust-store}")
private String serverSSLTrustStore;

@Bean
SSLTrustManagerHelper provideSSLTrustManagerHelper() {
   LOG.error(serverSSLTrustStore); // **SHOULDN'T PRINTS NULL**
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...