在spring boot中无论是properties或者是yaml配置,最终都会被加载到Spring Environment中,在Spring中可以通过@Value注解以及EnvironmentAware接口将Spring Environment中的配置注入到Bean的属性中。
在使用上可以将配置放在application.properties中,针对特定功能使用配置前缀,然后使用@Configuration
和@ConfigurationProperties将配置注入到配置Bean中,以下为加载一个学生信息的案例为例进行说明
- 添加配置
student.name=Li Lei student.age=18 student.courses=Math,Chinese,English
- 直接在类中引用
@Value("${student.name:Siri}") private String name;
- 通过配置类引用
使用@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;
- 指定配置文件的路径
默认情况下的配置都是放置在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;