我需要从 aplication.properties 文件中获取一些值,这些值取决于国家/地区,例如,我需要获取以下值:
@Value("${fr.Name}")
private String frName;
@Value("${fr.address}")
private String frAddress;
@Value("${de.Name}")
private String deName;
@Value("${de.address}")
private String deAddress;
@Value("${bz.Name}")
private String bzName;
@Value("${bz.address}")
private String bzAddress;
然后在我的服务方法中,我将使用多个 if else 语句,并且每次添加新国家/地区时我的值列表都会不断增加
public String apply(string country){
if ("fr".equals(country))
return frName + frAddress
else if ("de".equals(country))
return deName + deAddress
else if ("bz".equals(country))
return bzName + bzAddress
}
那么如何在不使用多个 if-else 语句的情况下重构它呢?
最佳答案
查看 spring 配置属性。这提供了以更具声明性的方式处理配置属性的机会 https://www.baeldung.com/configuration-properties-in-spring-boot
编辑
@Component
@ConfigurationProperties(prefix = "my", ignoreUnknownFields = false)
public class CountryBasedProps {
Map<String,CountryProps> config = new HashMap<>();
public Map<String, CountryProps> getConfig() {
return config;
}
public void setConfig(Map<String, CountryProps> config) {
this.config = config;
}
public static class CountryProps{
String name;
String address;
/*
other properties, with getters/setters
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "CountryProps{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
@Override
public String toString() {
return "CountryBasedProps{" +
"config=" + config +
'}';
}
}
属性:
my.config.fr.name=French
my.config.fr.address=Paris
my.config.de.name=German
my.config.de.address=Berlin
输出
CountryBasedProps{config={fr=CountryProps{name='French', address='Paris'}, de=CountryProps{name='German', address='Berlin'}}}
注意:
将@EnableConfigurationProperties()
添加到您的项目
关于java - 如何重构从属性文件获取多个@Value的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021793/