SpringBoot配置文件、热部署、YAML语法、配置文件值注入

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 的对比

特性YAMLJSONXML
可读性非常好,语法简洁,层次分明结构清晰,但需要括号和引号,较冗长较复杂,冗长,包含标记标签
语法简洁性简洁,使用空格和缩进表示层次需要引号、括号、逗号等符号需要大量的标签和属性定义
注释支持支持注释不支持注释支持注释
数据表示能力强,支持多层嵌套和复杂结构强,支持嵌套和数据结构强,支持嵌套和数据结构
文件大小通常较小,文件体积比 JSON 和 XML 小较大,包含括号和逗号等符号较大,包含标签和闭合标记
常见用途配置文件、数据交换数据交换、APIs文档描述、配置文件

image-20241227150943408

3.YAML语法

3.1键值对

  • k:(空格)v:表示一对键值对(空格必须有);
  • 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
  • 属性和值也是大小写敏感;

image-20241227153503428

3.2值的写法

  • 字面量:
    • 普通的值(数字,字符串,布尔)
  • 字符串:
    • 默认不用加上单引号或者双引号;
    • “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
    • ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

3.3对象、Map(属性和值)(键值对)

  • k: v:在下一行来写对象的属性和值的关系;注意缩进
  • 对象还是k: v的方式

image-20241227154812739

3.4数组(List、Set)

  • 用- 值表示数组中的一个元素

image-20241227153712653

  • 行内写法(推荐)

image-20241227153741496

4.配置文件值注入

image-20241227154910922

image-20241227154919182

image-20241227155005072

我们可以导入配置文件处理器,以后编写配置就有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

加入配置文件处理器后的效果

image-20241227155225629

4.1properties配置文件在idea中默认utf-8可能会乱码

image-20241227155338806

4.2@Value获取值和@ConfigurationProperties获取值比较

image-20241227155406055

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

松散绑定(松散语法)

指一种语法规则较为宽松、灵活的编程或标记语言设计风格。

@ConfigurationProperties帮我自动匹配驼峰命名方式,能够执行成功

image-20241227160717336

4.3配置文件值注入

4.3.1邮箱验证

引入依赖

	    <!-- 验证依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

使用@ConfigurationProperties

image-20241227164452409

image-20241227164931407

告诉我们不是一个合法的邮箱,更改邮箱继续尝试

此时通过校验

image-20241227165055629

使用@Value

验证成功

image-20241227165415285

@Value还支持运算,但是@ConfigurationProperties不支持

image-20241227170434404

4.3.2@PropertySource&@ImportResource&@Bean

@PropertySource:加载指定的配置文件;

image-20241227173808086

image-20241227174202430

@ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

image-20241227174324194

image-20241227174331819

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支持多文档块方式

image-20241227174825079

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

文档块以 ---分隔开

image-20241227175513240

4.5.3激活指定profile
  1. 在配置文件中指定 spring.profiles.active=dev
  2. 命令行:java -jar springboot01-1.0-SNAPSHOT.jar --spring.profiles.active=dev
  3. 可以直接在测试的时候,配置传入命令行参数
  4. 虚拟机参数;
  5. -Dspring.profiles.active=dev

image-20241227180204157

4.6配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

配置文件的读取顺序,优先级由高到低,高优先级的配置会覆盖低优先级的配置:

classpath一般为resources

  1. 根目录/config/
  2. 根目录/
  3. classpath目录/config/
  4. classpath目录/
    image-20241227184443339
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值