Как прочитать внешние свойства на основе значения локальной переменной в Spring Boot? - PullRequest
1 голос
/ 31 октября 2019

допустим, у меня есть следующие свойства в моем application.properties

url.2019=http://example.com/2019
url.2020=http://example.com/2020

И у меня есть этот метод,

public String getUrl(String year) {

    String url;

    // here I want to read the property value based on the value of year
    // if year is "2019", I want to get the value of ${url.2019}
    // if year is "2020", I want to get the value of ${url.2020}
    // something like #{url.#{year}} ??

    return url;
}

Каков наилучший способ достичь этого?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Для этого может быть несколько способов

Если ваши свойства не управляются пружиной

https://www.baeldung.com/inject-properties-value-non-spring-class

Еслион управляется пружиной

1.) вы можете определить карту в application.properies, можете вставить карту в ваш код и прочитать любое свойство, которое вы хотите

2), которое вы можете внедритьпеременная окружения и свойство read по требованию

@Autowired 
private Environment environment;

public String getUrl(String year) {

    String url = "url." + year ;

    String value =environment.getProperty(url);

    return url;
}
2 голосов
/ 31 октября 2019

application.properties:

url.2019=https://
url.2020=https://

Код, просто используйте @ConfigurationProperties обязательно для поля карты, в противном случае вы не получите значения.

@Configuration
@PropertySource("put here property file path")
@ConfigurationProperties()
public class ConfigProperties {

    @Value($("url"))
    Map<String,String> urlMap;


    public String getUrl(String year) {
      String url = urlMap.get(year);
      System.out.println(url);
    }
}
...