Чтение значений из внешнего файла в весенней загрузке application.yml

Значение открытого текста доступно в файле /tmp/pass, его необходимо прочитать в компоненте весенней загрузки application.yml.

Пример Spring.datasource.password: ФАЙЛ(/tmp/pass)

Spring.datasource.password: файл:/tmp/pass

Оба не работают, есть ли другой способ прочитать содержимое из внешнего файла в application.yml?


person Bhuvan    schedule 03.06.2021    source источник
comment
я сомневаюсь, что это возможно только с yaml, и не так просто с spring... но ваш вопрос указывает в правильном направлении, см. также: - stackoverflow.com/q/45899911/592355 - spring.io/blog/2016/08/15/ - medium.com/@sun30nil/ - dev.to/biplov/, а также: - stackoverflow .com/q/56808232/592355 и docs.docker.com/compose/ env-файл   -  person xerx593    schedule 03.06.2021
comment
Можно ли создать ФАЙЛ(/tmp/secrets) в deployment.yaml?   -  person Bhuvan    schedule 03.06.2021
comment
Нет! Можно (например) взять содержимое /tmp/secrets и сохранить его как переменную среды с именем (точно) SPRING_DATASOURCE_PASSWORD .. это переопределит значение application.proeprties. см. главу 2   -  person xerx593    schedule 03.06.2021


Ответы (1)


Есть способ сделать это, однако это может быть не лучший способ. Предположим, у вас есть следующий application.yml:

spring:
    some-config:
        password: FILE(xxx)
        username: FILE(yyy)
        other-properties: FILE(zzz)

Создайте следующий файл конфигурации:

@Configuration
@ConfigurationProperties("spring.some-config")
public class SomeConfigSettings {
    private String password;
    private String username;
    private String otherProperties;

    private String getPassword() {
        return this.password;
    }
    private void setPassword(String password) {
        this.password = FileUtil.read(password)
    }

    // Provide getter/setters for remaining fields
    .......
}

Во время запуска приложения Spring будет вызывать методы установки со значениями, указанными в application.yml. Все, что вам нужно, это реализовать метод FileUtil.read, чтобы он использовал ваш формат FILE(/file/path).

Затем вы можете получить доступ к свойствам spring.some-config в ваших компонентах:

@Autowire
private SomeConfigSettings someConfigSettings;
....

public void someMethod() {
    someConfigSettings.getPassword();
}
person eparvan    schedule 03.06.2021