Spring Boot 配置文件
技术栈:SpringBoot 1.5+
一、自动配置
二、自定义属性
在项目根目录 springboot-learning-example,运行 maven 指令:
cd springboot-learning-example
mvn clean install
运行 springboot-properties 工程 org.spring.springboot.property.PropertiesTest 测试类的 getHomeProperties 方法。可以在控制台看到输出,这是通过自定义属性获取的值:
HomeProperties{province='ZheJiang', city='WenLing', desc='dev: I'm living in ZheJiang WenLing.'}
首先项目结构如下:
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── org
│ │ └── spring
│ │ └── springboot
│ │ ├── Application.java
│ │ └── property
│ │ ├── HomeProperties.java
│ │ └── UserProperties.java
│ └── resources
│ ├── application-dev.properties
│ ├── application-prod.properties
│ └── application.properties
└── test
├── java
│ └── org
│ └── spring
│ └── springboot
│ └── property
│ ├── HomeProperties1.java
│ └── PropertiesTest.java
└── resouorces
└── application.yml
在 application.properties 中对应 HomeProperties 对象字段编写属性的 KV 值:
## 家乡属性 Dev
home.province=ZheJiang
home.city=WenLing
home.desc=dev: I'm living in ${home.province} ${home.city}.
然后,编写对应的 HomeProperties Java 对象:
/**
* 家乡属性
*
* Created by bysocket on 17/04/2017.
*/
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 描述
*/
private String desc;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "HomeProperties{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
如果不是用 application.properties 文件,而是用 application.yml 的文件,对应配置如下:
## 家乡属性
home:
province: 浙江省
city: 温岭松门
desc: 我家住在${home.province}的${home.city}
三、random.* 属性
运行 springboot-properties 工程 org.spring.springboot.property.PropertiesTest 测试类的 randomTestUser 方法。多次运行,可以发现每次输出不同 User 属性值:
UserProperties{id=-3135706105861091890, age=41, desc='泥瓦匠叫做3cf8fb2507f64e361f62700bcbd17770', uuid='582bcc01-bb7f-41db-94d5-c22aae186cb4'}
application.yml 方式的配置如下( application.properties 形式这里不写了):
## 随机属性
user:
id: ${random.long}
age: ${random.int[1,200]}
desc: 泥瓦匠叫做${random.value}
uuid: ${random.uuid}
四、多环境配置
application-dev.properties:开发环境
application-prod.properties:生产环境
Spring Boot 是通过 application.properties 文件中,设置 spring.profiles.active 属性,比如 ,配置了 dev ,则加载的是 application-dev.properties :
# Spring Profiles Active
spring.profiles.active=dev
那运行 springboot-properties 工程中 Application 应用启动类,从控制台中可以看出,是加载了 application-dev.properties 的属性输出:
HomeProperties{province='ZheJiang', city='WenLing', desc='dev: I'm living in ZheJiang WenLing.'}