Spring Boot получает версию application.properties (или путь к файлу) - PullRequest
0 голосов
/ 20 января 2020

Я использую весеннюю загрузку, и мне нужно получить экземпляр файла application.properties, загруженного при запуске; Является ли это возможным?? (Возможный обходной путь - найти путь к файлу application.properties, загруженного при запуске ... но как его получить?)

В настоящее время у меня есть application.properies в моем проекте, но в будущем мне придется получить его из переменной среды, которая будет содержать полный путь

класс, который содержит управление моими свойствами, выглядит так:

@Component
public class SpringBootConfigurations {

public static String PROP_JIRA_USER;

@Value("${jira.user}")
private void setJiraUser(String user) {
    PROP_JIRA_USER = user;
}

public static String PROP_JIRA_PASSWORD;

@Value("${jira.password}")
private void setJiraPassword(String password) {
    PROP_JIRA_PASSWORD = password;
} etcc...

спасибо

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Похоже, вам нужны свойства как java Файловый объект, чтобы соответствовать подписи вашей библиотеки SMTP. Один из способов сделать это - просто прочитать свойства как ресурс classpath.

@Value("classpath:data/application.properites")
Resource resourceFile;

Оттуда вы можете преобразовать в файл с помощью вызова getFile и передать его в библиотеку.

Однако, вам может быть лучше создать объект ConfigurationProperties и просто сгенерировать файл программно с помощью FileWriter и передать его вместе. Было бы более декларативным и более понятным в реализации именно то, что происходит.

Чтобы добавить немного больше подробностей о свойствах конфигурации. Вы могли бы сделать что-то вроде этого:

@Configuration
@ConfigurationProperties(prefix = "smtp")
public class ConfigProperties {

    private String host;
    private int port;
    private String username;
     // other smtp props
    // standard getters and setters

    public File propsAsFile() {
        Properties props = new Properties();
        props.setProperty("smtp.host", host);
        props.setProperty("smtp.port", port);
        ...
        File temp = File.createTempFile("xyz",".properties");
        FileOutputStream propsStream = new FileOutputStream(temp)
        prop.store(propsStream, null);
    } 
}

Также @Kayaman правильно в комментариях. Только go через эту файловую гимнастику, если вам это абсолютно необходимо (кажется маловероятным, что вам нужно все это, но зависит от используемой вами библиотеки)

Подробнее о ConfigurationProperties https://www.baeldung.com/configuration-properties-in-spring-boot

0 голосов
/ 20 января 2020

Spring (Boot) предлагает очень всеобъемлющий и гибкий механизм конфигурации, который абстрагируется от источника конфигурации. Этот механизм основан на четко определенном порядке переопределения свойств, который указан в Глава 2: Внешняя конфигурация .

Учитывая эту документацию, существует несколько способов, как вы можете получить параметры конфигурации в свой Приложение Spring Boot (не исчерпывающее):

  1. Передать их в качестве аргумента командной строки (например, --smpt.port=1234)
  2. Передать их как системные свойства в командной строке (например, -Dsmpt.port=1234 )
  3. Определить их как переменные среды
  4. Использовать @PropertySource аннотацию в ваших @Configuration классах. Поскольку значение @PropertySource может содержать заполнители ${...}, здесь можно использовать переменную окружения для ссылки на файл свойств.
  5. Напишите свое собственное PropertySource -implementation, (Хотя я думаю, что это не обязательно для ваших целей.)

См. Также https://www.baeldung.com/properties-with-spring.

...