Какова хорошая практика для доступа к внешним конфигурациям в Spring Boot? - PullRequest
0 голосов
/ 05 июня 2019

Я устанавливаю приложение Spring Boot, в котором определенные конфигурации читаются из моего application.yaml-файла. Я делал это несколько раз и раньше, и это хорошо работает, но мне было интересно, есть ли лучший способ получить доступ к этой конфигурации во время выполнения или я создаю возможные проблемы, не следуя некоторым рекомендациям.

Прямо сейчас класс, который извлекает конфигурацию, просто определяется как Компонент, подобный этому:

@Component
@EnableConfigurationProperties
@ConfigurationProperties("myPrefix")
public class MyExternalConfiguration{
    private HashMap<String, Boolean> entries= new HashMap<String, Boolean>();

    public Boolean getConfigurationForKey(String key) {
        return this.entries.get(key);
    }
}

А затем автоматически подключается к нескольким другим классам, которым необходим доступ к этой конфигурации, например:

@Component
public class MyClass{
    @Autowired
    private MyExternalConfiguration myExternalConfiguration;

    public void doSomething(){
        //...
        Boolean someEntry = myExternalConfiguration.getConfigurationForKey(someKey);
    }
}

Теперь это работает просто отлично. Просто я видел примеры, когда конфигурации, подобные этой, обрабатываются, например, как одиночка (хотя не в среде Spring-Boot). Я просто хотел бы спросить, есть ли какой-то общепринятый способ доступа к внешним конфигурациям или вы видите проблему с тем, как я обращаюсь к ней в моем проекте.

Заранее спасибо!

1 Ответ

1 голос
/ 05 июня 2019

В справочном руководстве Spring Boot есть целая глава о конфигурации:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config

Проще говоря, есть два варианта доступа к конфигурации:

С аннотацией значения:

@Value("${name}")
private String name;

Или тип безопасности с классом конфигурации:

@ConfigurationProperties(prefix="my")
public class Config {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }
}

Так что вам не нужно читать файл конфигурации самостоятельно.

...