美文网首页
Spring Boot读取配置文件自定义信息

Spring Boot读取配置文件自定义信息

作者: AlienPaul | 来源:发表于2017-10-26 15:32 被阅读0次

    为什么要将信息放入配置文件中?

    Java项目中难免有一些配置信息(例如服务器名称,地址和端口号等等),为了实现一套代码多处部署使用,需要将这些配置信息提取到配置文件,在程序运行的时候获取,省去了为不同系统维护不同代码的麻烦。

    在Spring Boot项目中实现配置文件信息的获取

    在Spring Boot项目中读取配置文件的信息主要有以下两个方式:

    • @Value注解:适合读取单条的配置信息。
    • @ConfigurationProperties注解:适合读取一组配置信息。

    准备配置文件

    假定我们需要在程序中使用如下的配置信息:
    application.yml:

    #Read by @Value
    my:
      name: Paul
    
    #Read by @ConfigurationProperties
    test:
      string: Hello World
      intValue: 10
      booleanValue: false
      list[0]: Hi
      list[1]: Kate
      list[2]: Mary
      map.city: Sydney
      map.street: George Street
      nested.string: nested string
      nested.intValue: 100
    

    其中前缀为my的信息通过@Value读取,前缀为test的信息通过@ConfigurationProperties读取。

    使用@value读取配置信息

    @Value("${my.name:default}")
    private String myName; //值为Paul
    

    @Value注解的书写规则为:@Value("${属性名:默认值}")。如果属性名在配置文件中不存在,则将默认值注入到变量中。

    使用 @ConfigurationProperties 读取配置文件

    依照例子中的自定义信息格式,编写其对应的Data Class如下:

    @ConfigurationProperties(prefix = "test")
    @Component
    public class MyConfigBean {
        private String string;
        private int intValue;
        private boolean booleanValue;
        private List<String> list;
        private Map<String, String> map;
    
        private final Nested nested = new Nested();
    
        public String getString() {
            return string;
        }
    
        public void setString(String string) {
            this.string = string;
        }
    
        public int getIntValue() {
            return intValue;
        }
    
        public void setIntValue(int intValue) {
            this.intValue = intValue;
        }
    
        public boolean isBooleanValue() {
            return booleanValue;
        }
    
        public void setBooleanValue(boolean booleanValue) {
            this.booleanValue = booleanValue;
        }
    
        public List<String> getList() {
            return list;
        }
    
        public void setList(List<String> list) {
            this.list = list;
        }
    
        public Map<String, String> getMap() {
            return map;
        }
    
        public void setMap(Map<String, String> map) {
            this.map = map;
        }
    
        public Nested getNested() {
            return nested;
        }
    
        static class Nested {
            private String string;
            private int intValue;
    
            public String getString() {
                return string;
            }
    
            public void setString(String string) {
                this.string = string;
            }
    
            public int getIntValue() {
                return intValue;
            }
    
            public void setIntValue(int intValue) {
                this.intValue = intValue;
            }
        }
    }
    

    需要使用这些配置的时候只需Autowire这个class即可:

    @Autowire
    private MyConfigBean myConfigBean;
    
    public void test() {
        String string = myConfigBean.getString(); // Hello World
        int intValue = myConfigBean.getIntValue(); // 10
        // ...
        String nestedString = myConfigBean.getNested().getString(); // nested string
    }
    

    后续

    对于更为复杂的属性文件解析,请阅读SpringBoot 复杂配置信息读取

    相关文章

      网友评论

          本文标题:Spring Boot读取配置文件自定义信息

          本文链接:https://www.haomeiwen.com/subject/etrkpxtx.html