Spring Boot之——配置文件
配置文件分类
目的:
- 掌握SpringBoot加载配置文件作用
- 掌握配置文件分类有两大类,如果同时存在会怎么样?
解析:
配置文件的作用:
修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
SpringBoot官方讲解:约定 优于 配置 优于 编码
配置文件分类:
通过spring-boot-starter-parent
依赖发现:
配置文件是两大类:yaml和properties 配置文件
以端口号修改为例:
在resources目录下新建 application.properties 配置文件,添加端口号:
1
server.port=8081 # 修改tomcat端口
启动项目发现端口修改为 8081
注释application.properties目录下端口设置,添加 application.yml配置文件
1
2server:
port: 8082启动项目发现端口修改为 8082
如果把application.properties中的注释取消,即两种配置文件同时存在,启动项目发现项目的端口是 8081,说明是application.properties配置文件生效
分别在application.properties和application.yml 里添加
company1=itheima、company2: itcast
- 通过 @value注解注入读取配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class HelloController {
private String company1;
private String company2;
public String hello(){
return " hello Spring Boot !" + company1 +" " + company2;
}
}访问浏览器:
结论:
两个配置文件同时都生效了,他们之间是取并集关系
小结:
- 约定 优于 配置 优于 编码 #TODO
- 两类配置文件如果同时存在,若 key 相同则 properties 优先级高,若key不同则合并
YAML介绍
目的:了解yaml是什么,有什么作用
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件
YAML基本使用
目的:掌握Yaml语法的基本数据类型的配置
步骤:
基本语法:
- 大小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- ‘’#” 表示注释,从这个字符一直到行尾,都会被解析器忽略。
- 字符串无需加引号,如果要加,
''
与""
表示字符串内容 会被 转义/不转义
实现:
1、配置文件:
**对象(map)**:键值对的集合。
1 | person: |
数组:一组按次序排列的值
1 | address: |
纯量:单个的、不可再分的值
1 | msg1: 'hello \n world' # 单引忽略转义字符 |
参数引用
1 | name: lisi |
2、使用 @value 读取配置:
1 | //获取普通配置 |
YAML高级配置
目的:掌握自定义对象及成员属性是对象的数据类型
步骤:
- 定义实体类 Man和Woman
- 添加配置文件
- 依赖注入测试
实现:
1、定义实体类 Man和Woman
1 | package com.itheima.sh.pojo; |
1 | package com.itheima.sh.pojo; |
2、添加配置文件
1 | server: |
3、依赖注入测试
方式1:引导类开启注解支持(推荐)
@ConfigurationProperties(prefix = “man”)+ @EnableConfigurationProperties(Man.class)
方式2:@ConfigurationProperties(prefix = “man”)+@Component
Controller编写代码测试:http://localhost:8082/getman
1 |
|
优化:将 Woman类放在 Man类中,作为内部类
实现配置文件自动提示
目的:解决实体类配置文件 出现以下现象:
自定义的类和配置文件绑定一般没有提示。
步骤:
打开官网查看步骤
添加依赖实现自动提示
实现:
在pom文件中添加:
1 | <!--解决SpringBoot自定义配置提示问题--> |
多环境切换
目的:profile是用来完成不同环境下,配置动态切换功能的
实现:
profile配置方式:
多profile文件方式:提供多个配置文件,每个代表一种环境。
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
yml多文档方式(了解):
在yml中使用 — 分隔不同配置
profile激活方式
- 配置文件: 再配置文件中配置:spring.profiles.active=dev
- 虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
- 命令行参数:java -jar XXX.jar –spring.profiles.active=dev
小结:
- 实际开发使用 多profile形式,主要用于切换不同的环境,便于项目维护;
项目内部配置文件加载顺序
目的:掌握配置文件加载顺序问题
步骤:
1、查看官网,可以看出给了17种方式的配置加载形式
2、按照官网说明,添加配置实现
实现:
优先级:由高到底
- file:./config/:当前项目下的/config目录下
- file:./ :当前项目的根目录
- classpath:/config/:classpath的/config目录
- classpath:/ :classpath的根目录
项目外部配置文件加载顺序
目的:可以在jar包外修改配置文件
实现:
外部配置文件的使用是为了对能不文件的配合
- 命令行
1 | java -jar app.jar --name="Spring“ --server.port=9000 |
- 指定配置文件位置
1 | java -jar myproject.jar --spring.config.location=e://application.properties |
- 外部不带profile的properties文件
1 | classpath:/config/application.properties |
小结:
整体加载优先级: jar包外 到 jar包内
如果jar和配置文件在同一级,配置文件会生效,会被自动的加载
打包的时候 只会去打包classpath(src|main/resources)的配置文件,项目的根目录下的配置文件不会被打包到jar包中。
总结
- 核心功能Core Features: SpringApplication | External Configuration | Profiles | Logging
- SpringBoot快速使用
- 多profile实现
- 外部配置文件加载
- 日志(专题) //TODO