Spring Boot加载自定义配置方案

在spring boot中无论是properties或者是yaml配置,最终都会被加载到Spring Environment中,在Spring中可以通过@Value注解以及EnvironmentAware接口将Spring Environment中的配置注入到Bean的属性中。

在使用上可以将配置放在application.properties中,针对特定功能使用配置前缀,然后使用@Configuration

@ConfigurationProperties将配置注入到配置Bean中,以下为加载一个学生信息的案例为例进行说明

  1. 添加配置
student.name=Li Lei
student.age=18
student.courses=Math,Chinese,English
  1. 直接在类中引用
@Value("${student.name:Siri}")
    private String name;
  1. 通过配置类引用

使用@Configuration代表这是一个配置类,自动配置扫描到以后会将这个配置Bean纳入到容器中,并且自动进行属性装配,@ConfigurationProperties(prefix = "student")则指定了配置项的前缀,在springboot中属性绑定的规则是宽松的,假如一个属性名称firstName,配置文件中的配置项可以是first_name、first-name、firstName或者是FIRSTNAME。

@Configuration
@ConfigurationProperties(prefix = "student")
public class TestConfig {
    private String name;
    private int age;
    private List<String> courses;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<String> getCourses() {
        return courses;
    }
    public void setCourses(List<String> courses) {
        this.courses = courses;
    }
}
  @Autowired
    private TestConfig testConfig;
  1. 指定配置文件的路径

默认情况下的配置都是放置在classpath下的application.properties内,如果希望放置在其他的地方则可以通过spring.config.location进行指定,而如果配置项特别多,且针对的都是特定功能,则建议将这些配置项进行独立,可以使用@PropertySource注解来指定。

以下案例所示,value指定文件的路径,encoding指定读取配置文件的编码,ignoreResourceNotFound表示指定的配置文件不存在是否报错,默认是false。当设置为 true 时,若该文件不存在,程序不会报错。

@Configuration
@PropertySource(value = "classpath:test.properties",encoding="UTF-8",ignoreResourceNotFound = false)
@ConfigurationProperties(prefix = "student")
public class TestConfig {
    private String name;
    private int age;
    private List<String> courses;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<String> getCourses() {
        return courses;
    }
    public void setCourses(List<String> courses) {
        this.courses = courses;
    }
}
  @Autowired
    private TestConfig testConfig;

上一篇:使用GAN一键生成宫崎骏动漫风格照片


下一篇:自定义Springboot启动Banner