springboot默认支持两种格式的配置文件:.properties和.yml。其中.properties是属性文件,也是最常用的一种;.yml是yaml格式的文件,yaml是一种简洁的标记语言。例如:在properties文件中定义的spring.data.url,在yaml文件中的定义如下
spring:
data:
url:
从上可以发现yaml层次感更强,具体在项目中选择那种资源文件是没有什么规定的。
spring boot配置
简单案例
首先创建application.properties文件,并定义name=ysl,创建一个名问Name的java类
package com.ysl.entity;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class User { @Value("${name:wdd}")
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
在TestController中调用User对象
package com.ysl.controller;import com.ysl.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
public class TestController { @Autowired
private User user; @RequestMapping(value = "/{name}",method = RequestMethod.GET)
@ResponseBody
public String home(@PathVariable("name") String name){
return "hello," + name;
}}
启动该spring boot工程,在浏览器输入http://localhost:8080/ddd,显示出hello,wdd
解析
1.在springboot中默认加载classpath:/,classpath:/config/,file:./,file:./config/
路径下以application
命名的property或yaml文件;
2.参数spring.config.location设置配置文件存放位置
3.参数spring.config.name设置配置文件存放名称
配置文件获取随机数
在springboot中调用Random中的方法可以获取随机数,实例如下:在application.properties中增加age=${random.int},同事修改User对象。会为age生成一个随机值。
@Value("${age}")
private int age; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
使用random的时候也可以限制随机数的范围,实例如下:
${random.int()} : 限制生成的数字小于10
${random.int[,]} : 指定范围的数字
在配置文件调用占位符
修改配置文件:
name=ysl
age=${random.int}
remark=hello,my name is ${name},age is ${age}
修改bean:
@Value("$remark")
private String remark;
可以发现将name
修改为userName
,在配置文件中调用${name}
是工程名
去掉@Value
大家可以发现前面在bean中调用配置参数使用的为注解@Value
,在spring boot中是可以省去该注解。
配置文件:
userName=liaokailin
age=${random.int[,]}
remark=hello,my name is ${userName},age is ${age}
user.address=china,hangzhou
增加user.address=china,hangzhou
,为了调用该参数来使用@ConfigurationProperties
。
@Component
@ConfigurationProperties(prefix = "user")
public class User { private @Value("${userName:lkl}") String name;
private @Value("${age}") Integer age;
private @Value("${remark}") String remark;
private String address;
使用@ConfigurationProperties
需要指定prefix
,同时bean中的属性和配置参数名保持一致。
实体嵌套配置
@Component
@ConfigurationProperties(prefix = "user")
public class User { private @Value("${userName:lkl}") String name;
private @Value("${age}") Integer age;
private @Value("${remark}") String remark;
private String address;
private Address detailAddress;
public class Address {private String country;
private String province;
private String city;
}
配置文件:
userName=liaokailin
age=${random.int[,]}
remark=hello,my name is ${userName},age is ${age}
user.address=china,hangzhou
user.detailAddress.country=china
user.detailAddress.province=zhejiang
user.detailAddress.city=hangzhou
这种嵌套关系如果通过yaml文件展示出来层次感会更强。
user:
detailAddress:
country:china
province:zhejiang
city:hangzhou
配置集合
一个人可能有多个联系地址,那么地址为集合
@Component
@ConfigurationProperties(prefix = "user")
public class User { private @Value("${userName:lkl}") String name;
private @Value("${age}") Integer age;
private @Value("${remark}") String remark;
private String address;
private Address detailAddress;
private List<Address> allAddress = new ArrayList<Address>();
配置文件:
user.allAddress[].country=china
user.allAddress[].province=zhejiang
user.allAddress[].city=hangzhouuser.allAddress[].country=china
user.allAddress[].province=anhui
user.allAddress[].city=anqing
多配置文件
spring boot设置多配置文件很简单,可以在bean上使用注解@Profile("development")
即调用application-development.properties|yml
文件,也可以调用SpringApplication
中的etAdditionalProfiles()
方法。
也可以通过启动时指定参数spring.profiles.active
。