SpringBoot的配置文件
1.SpringBoot的热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
在pom.xml中引入热部署依赖
<!-- SpringBoot热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
修改java代码或者配置文件模板后可以通过ctrl+f9来实施热部署。
2.配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
- application.properties
- application.yml
2.1配置文件的作用
修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
2.2YAML配置文件:
YAML 的全称是 YAML Ain’t Markup Language,即“YAML 不是标记语言”。这个名称本身就表达了它与传统的标记语言(如 XML)不同的设计理念。
相较于 XML(标记语言)和 JSON(数据交换格式),YAML 更加关注数据的表示和层次结构,避免了复杂的标记,极大地提高了配置文件的易读性和简洁性。
- YAML 是数据序列化格式,旨在以简洁、易读的方式表示数据结构。
- 它通常用于配置文件、数据交换和对象序列化等场景。
- 它以可读性强为设计目标,强调用户的易读性和书写简洁性。
2.3YAML 与 JSON 和 XML 的对比
特性 | YAML | JSON | XML |
---|---|---|---|
可读性 | 非常好,语法简洁,层次分明 | 结构清晰,但需要括号和引号,较冗长 | 较复杂,冗长,包含标记标签 |
语法简洁性 | 简洁,使用空格和缩进表示层次 | 需要引号、括号、逗号等符号 | 需要大量的标签和属性定义 |
注释支持 | 支持注释 | 不支持注释 | 支持注释 |
数据表示能力 | 强,支持多层嵌套和复杂结构 | 强,支持嵌套和数据结构 | 强,支持嵌套和数据结构 |
文件大小 | 通常较小,文件体积比 JSON 和 XML 小 | 较大,包含括号和逗号等符号 | 较大,包含标签和闭合标记 |
常见用途 | 配置文件、数据交换 | 数据交换、APIs | 文档描述、配置文件 |
3.YAML语法
3.1键值对
- k:(空格)v:表示一对键值对(空格必须有);
- 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
- 属性和值也是大小写敏感;
3.2值的写法
- 字面量:
- 普通的值(数字,字符串,布尔)
- 字符串:
- 默认不用加上单引号或者双引号;
- “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
- ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
3.3对象、Map(属性和值)(键值对)
- k: v:在下一行来写对象的属性和值的关系;注意缩进
- 对象还是k: v的方式
3.4数组(List、Set)
- 用- 值表示数组中的一个元素
- 行内写法(推荐)
4.配置文件值注入
我们可以导入配置文件处理器,以后编写配置就有提示了
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
加入配置文件处理器后的效果
4.1properties配置文件在idea中默认utf-8可能会乱码
4.2@Value获取值和@ConfigurationProperties获取值比较
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
松散绑定(松散语法)
指一种语法规则较为宽松、灵活的编程或标记语言设计风格。
@ConfigurationProperties帮我自动匹配驼峰命名方式,能够执行成功
4.3配置文件值注入
4.3.1邮箱验证
引入依赖
<!-- 验证依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
使用@ConfigurationProperties
告诉我们不是一个合法的邮箱,更改邮箱继续尝试
此时通过校验
使用@Value
验证成功
@Value还支持运算,但是@ConfigurationProperties不支持
4.3.2@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件;
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
1、配置类@Configuration------>Spring配置文件
2、使用@Bean给容器中添加组件
/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*
* 在配置文件中用<bean><bean/>标签添加组件
* *
/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService02(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}
4.4配置文件占位符
4.4.1随机数
- ${random.value}:生成一个随机字符串
- ${random.int}:生成一个随机的整数
- ${random.long}:生成一个随机的长整数。
- ${random.int(10)}:生成一个0到10之间的随机整数(包括0,不包括10)。
- ${random.int[1024,65536]}::生成一个1024到65536之间的随机整数(包括1024,不包括65536)。
4.4.2占位符获取之前配置的值,如果没有可以是用:指定默认值
person.last‐name=张三${random.uuid}
//每次应用启动时都会生成不同的UUID,如"张三3f1d63f5-4ab1-4b87-9472-8f618d88e2a3"
person.age=${random.int}
//生成一个随机的整数
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
//设置maps中 k1键的 value值 为 v1
person.maps.k2=14
person.lists=a,b,c
//自动解析lists为List类型的属性,并包含a,b,c
person.dog.age=15
person.dog.name=${person.hello:hello}_dog
如果person.hello配置存在时,例如:person.hello的值为 world,因此person.dog.name
的最终值为 world_dog
。
如果person.hello配置不存在,Spring 会使用默认值 "hello"
,因此,person.dog.name
的最终值为 hello_dog
。
4.5Profile
4.5.1多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
4.5.2yml支持多文档块方式
server:
port: 8085
spring:
profiles:
active: dev
---
person:
Email: 1234561@163.com
last_name: 张三01
age: 18
boss: true
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists: [lisi,wangwu]
dog:
name: 小狗
age: 12
spring:
profiles: dev
---
person:
Email: 1234561@163.com
last_name: 张三02
age: 18
boss: true
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists: [lisi,wangwu]
dog:
name: 小狗
age: 12
spring:
profiles: prod
文档块以 ---
分隔开
4.5.3激活指定profile
- 在配置文件中指定 spring.profiles.active=dev
- 命令行:java -jar springboot01-1.0-SNAPSHOT.jar --spring.profiles.active=dev
- 可以直接在测试的时候,配置传入命令行参数
- 虚拟机参数;
- -Dspring.profiles.active=dev
4.6配置文件加载位置
springboot 启动会扫描以下位置的application.properties
或者application.yml
文件作为Spring boot的默认配置文件
配置文件的读取顺序,优先级由高到低,高优先级的配置会覆盖低优先级的配置:
classpath一般为resources
- 根目录/config/
- 根目录/
- classpath目录/config/
- classpath目录/