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

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

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 list;
    private Map 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 getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public Map getMap() {
        return map;
    }

    public void setMap(Map 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读取配置文件自定义信息)