java - 如何重构从属性文件获取多个@Value的方式

标签 java spring spring-boot

我需要从 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/

相关文章:

java - java中使用优先级队列对元素进行排序

java - 如何正确读取这个异常?这是 Hibernate 映射问题吗?

java - 插入嵌入式文档而不阅读整个文档 - spring,mongo

spring - 以编程方式获取嵌入式 Servlet 容器信息

java - 如何使用通配符将泛型传递给函数而不进行强制转换?

java - 如何使用 for 每次循环打印 ArrayList 中元素的索引号

java - 如果在 Spring Data JPA 中为 null 或为空,如何在 @Query 中跳过 @Param

java - Spring GrantedAuthorities 和相关对象的 Hibernate 问题

java - Return stream().collect() 在使用 ManyToOne OneToMany 映射时不起作用

java - 如何制作一个匹配任何语言单词的java正则表达式