Spring Boot 属性配置文件详解
SpringBoot 配置文件默认为application.properties,但现在的趋势是使用yaml,它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。application.properties 文件和 application.yaml 文件的区别后续详解~
一、自定义属性与加载
把项目中的配置文件application.properties改成application.yaml
- application.yaml
test:
user:
username : zhangsan
age : 18
toString: the age of ${test.user.username} is ${test.user.age}
- 属性类:PropertiesConfig
package com.springboot.testone.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class PropertiesConfig {
//通过@Value("${属性名}")注解来加载对应的配置属性
@Value("${test.user.username}")
private String username;
@Value("${test.user.age}")
private String age;
@Value("${test.user.toString}")
private String toString;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getToString() {
return toString;
}
public void setToString(String toString) {
this.toString = toString;
}
}
- 测试Controller
package com.springboot.testone.controller;
import com.springboot.testone.bean.PropertiesConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class HelloController {
@Autowired
private PropertiesConfig propertiesConfig;
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String hello() {
//return "hello,this is a springboot demo";
//return propertiesConfig.getUsername() + ":" + propertiesConfig.getAge();
return propertiesConfig.getToString();
}
}
二、自定义属性注入bean
- 将上面application.yml文件中的test.user注入到User对象里,注意这里的prefix指定的是test.user,对应配置文件中的结构
package com.springboot.testone.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "test.user")
public class User {
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 测试Controller
@Autowired
private User user;
@RequestMapping(value = "/test2", method = RequestMethod.GET)
public String test2(){
return user.getUsername() + ":" + user.getAge();
}
三、自定义额外的配置文件
假如我们不想把有些配置配置在application.yaml/properties中。新建其他配置文件:比如新建test.yaml文件。配置内容如上面的application.yml一样。那么我们注入对象时,应该这么写
@Configuration
@PropertySource(value = "classpath:test.yml")
@ConfigurationProperties(prefix = "test.user")
四、多个环境配置文件
在现实的开发环境中,我们需要不同的配置环境;格式为application-{profile}.properties,其中{profile}对应你的环境标识,比如:
- application-test.properties:测试环境
- application-dev.properties:开发环境
- application-prod.properties:生产环境
怎么使用?只需要我们在application.yml中加:
spring:
profiles:
active: dev
因为主入口都是application.yaml,这里指定配置文件为dev,即启用application-dev.yaml文件
server:
port: 8888
启动工程,发现程序的端口不再是8080,而是8888,表示开发环境配置成功。五、官方支持默认配置文件属性
六、配置文件优先级
- 当前目录下的一个/config子目录
- 当前目录
- 一个classpath下的/config包
- classpath根路径(root)
#注意# 如果我们有多个配置文件,优先级高的配置文件中存在和优先级低的配置文件相同属性时,取优先级高配置文件的,不冲突的时候,优先级低的配置文件属性同样会被加载,而不是只加载优先级高的配置文件属性。
上一篇: springboot自定义配置文件
下一篇: Spring Boot 属性配置文件
推荐阅读
-
Spring Boot应用Docker化的步骤详解
-
详解spring boot实现websocket
-
详解如何在spring boot中使用spring security防止CSRF攻击
-
Spring boot中PropertySource注解的使用方法详解
-
spring boot tomcat jdbc pool的属性绑定
-
Spring boot进行参数校验的方法实例详解
-
spring-boot读取props和yml配置文件的方法
-
详解spring boot引入外部jar包的坑
-
详解Spring Boot配置使用Logback进行日志记录的实战
-
详解Spring Boot实战之Rest接口开发及数据库基本操作