Несколько экземпляров общей @Configuration с различными @PropertySource в Spring - PullRequest
0 голосов
/ 25 января 2020

Привет У меня есть следующий файл конфигурации:

@Configuration
@PropertySources({
    @PropertySource("classpath:english.properties"),
    @PropertySource("classpath:spanish.properties")
})
public class LanguageConfig {

    @Value(${hello})
    private String hello;

    // getter setter
}

Я хочу знать, есть ли способ Autowire два экземпляра LanguageConfig , один для каждый язык. Что-то вроде:

public Myservice() {

    @Autowire
    @Qualifier("englishLanguage")
    private LanguageConfig englishConfig;


    @Autowire
    @Qualifier("spanishLanguage")
    private LanguageConfig spanishConfig;


}

Спасибо.

1 Ответ

4 голосов
/ 25 января 2020

Не уверен, что то, что вы хотите сделать, может быть достигнуто или нет, но я предлагаю вам это решение.

Вместо того, чтобы каждый язык был в отдельных файлах, вы можете поместить их в один файл, скажем languages.properties, а затем добавьте его, используя аннотацию @PropertySource("classpath:language.properties"). После этого вы можете внедрить эти свойства, используя @ConfigurationProperties.

en.hello=Hello
sp.hello=Hola

Класс LanguageConfig должен выглядеть следующим образом.

public class LanguageConfig {

    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }
}

Создайте эти LanguageConfig объекты в виде бинов и добавьте свойства, начиная с en и sp каждому из них.

    @Bean
    @ConfigurationProperties("en")
    public LanguageConfig engConfig() {
        return new LanguageConfig();
    }

    @Bean
    @ConfigurationProperties("sp")
    public LanguageConfig spanishConfig() {
        return new LanguageConfig();
    }

Тогда вы можете легко их использовать.

    @Autowired
    @Qualifier("engConfig")
    LanguageConfig englishConfig;

    @Autowired
    @Qualifier("spanishConfig")
    LanguageConfig spanishConfig;
...