SpringBoot基本配置和yaml、yml详解
springboot整合了市面上大部分热门框架的配置文件,并为其设置了默认值,若不想用默认配置,只需要在springboot核心配置文件application.properties
中直接修改即可
进行属性配置
springboot的核心配置文件通过键值对配置对应属性,例如
- 将服务器端口改为8888
server.port=8888
其他配置详见官方文档。
属性文件的格式
除了.properties
格式还有其他两种格式的配置文件可用,分别是.yml
、.yaml
,官方推荐使用.yml
,.yml
和.yaml
格式文件的写法是一样的。写法如下:
server:
port: 80
当三种配置文件格式共存时,加载优先级.properties
>.yml
>.yaml
,且共存叠加
.yaml
、.yml
语法规则
- 大小写敏感
- 属性层级关系用多行描述,每行结尾用冒号结束
- 使用缩进表示层级关系,同层级左侧对其,只允许使用空格(不允许使用Tab键)
- 属性前面添加空格(属性名与属性值之间使用冒号+空格作为分割)
-
#
表示注解 - **核心规则:**数据前面要用空格和冒号隔开
示例:
user是对象的表示格式,hobby是数组的表示格式,hobby2是数组的缩略格式,users为对象数组的表示格式,user1是对象数组的缩略格式。
country: china
province: zhejiang
city: hangzhou
user:
name: zhangsan
age: 15
hobby:
- game
- music
- sleep
- ping-pang
hobby2: [game,music,sleep,mpingpang]
users:
- name: zhangsan
age: 15
- name: lisi
age: 14
- name: wangwu
age: 13
users1: [{name: zhangsan,age: 15},{name: lisi,age: 14},{name: wangwu,age: 13}]
.yaml
、.yml
文件数据读取
读取单个数据
- 使用@Value读取
- 属性名引用方式,使用el表达式:${一级属性名.二级属性名…},数组用[]
/**
* 读取yaml或yml数据中的单一数据
* @return
*/
@Value("${country}")
private String country;
@Value("${user.username}")
private String name;
@Value("${hobby[1]}")
private String hobby1;
读取全部数据
- 使用springboot的自动装配注解@Autowired
- 用一个Enviroment类型数据装
- 使用时用Enviroment.getProperty(属性名)方法取该属性名的值
/**
* 读取yaml或yml数据中的全部数据
*/
@Autowired
private Environment env;
@GetMapping
public String getById(){
System.out.println(env.getProperty("country"));
return "springboot is running3...";
}
读取数据并封装到对象中
- 创建类,用于封装下面的数据
@Component
@ConfigurationProperties("datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
//getter、setter、toString
}
- 由spring帮我们加载数据到对象中,一定要告诉spring加载这组信息
@ConfigurationProperties("datasource")
就是这个注解
- 使用时直接从spring中获取信息使用
自动装配
@Autowired
private MyDataSource myDataSource;
.yaml
、.yml
文件的变量引用
- 同样是使用el表达式${一级属性名.二级属性名…}
- 使用双引号包裹的字符串,会使转义字符生效
baseDir: c:\win10
#使用${属性名}引用
tempDir1: ${baseDir}\temp
#使用双引号包裹的字符串,会使转义字符生效
tempDir2: "${baseDir}\temp"