欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-30 23:09:56
...

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

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 复杂配置信息读取