如何将application配置文件玩出花样来?| SpringBoot系列(二)

1,724 阅读4分钟

拓展 点击跳转哦~:SpringBoot系列学习汇总和拓展


@[toc]

前言

  • 建议大家引入lombok包,这样实体类就不用每次都自己手写get、set、tostring等方法,极度推荐哦~
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.10</version>
		</dependency>
  • 加上@Data注解后,编译器会自动帮我们加上get、set等方法,极大的减少了我们的代码量,看起来舒服很多~ 在这里插入图片描述

一、application.properties

  • 语法结构:

    • key=value 在这里插入图片描述
  • 作用:

    • 修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
  • 对比传统:

<server>
    <port>8888<port>
</server>
  • 对比现在:简约了很多。 在这里插入图片描述

二、application.yml

  • 官方推荐我们使用的是yml格式,因为他更加简约,功能反而更加强大。

  • 语法格式:key:空格 value

    • 空格不能省略
    • 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
    • 属性和值的大小写敏感 在这里插入图片描述
  • yml写入数组:以下两种写法都是合法的哦~ 在这里插入图片描述

  • yml写入对象:以下两种写法都是合法的哦~ 在这里插入图片描述

三、yml注入配置文件

3.1、@Value注入(老版)

  • 实体类
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Person {
    @Value("小小丁小小")
    private String name;
    @Value("24")
    private Integer age;
    @Value("175")
    private String high;
    @Value("捕鱼")
    private String like;
}
  • 单元测试执行结果 在这里插入图片描述
  • 弊端
    • 如果该类特别复杂的话,写起来比较麻烦。

3.2、yml注入

  • ①新建实体类,并加上@Data注解
import lombok.Data;

@Data
public class Student {
    private String name;
    private Integer age;
    private String high;
    private String like;
}
  • ②编写yml配置文件:
server:
  port: 7777

student:
  name: 大大丁大大
  age: 23
  high: 173
  like: 钓鱼
  • ③ 实体类增加@Component,@ConfigurationProperties(prefix = "Student")注解
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String name;
    private Integer age;
    private String high;
    private String like;
}
- 注意点:会爆红,但是不影响程序的执行,我们可以去除这个爆红。点击Open Documentation

在这里插入图片描述 点击这里也可以啦~ 在这里插入图片描述 pom文件中添加该处引入即可。

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
  • 完美解决 在这里插入图片描述

  • ④编写单元测试,注入实体类

import com.dyjTest.dyjProject.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DyjProjectApplicationTests {

	@Autowired(required = false)
	Student student;

	@Test
	void contextLoads() {
		System.out.println(student);
	}

}

执行结果如下: 在这里插入图片描述乱码了!解决TA! 在这里插入图片描述 再次执行:结果如下完美解决!! 在这里插入图片描述

  • 总结 在这里插入图片描述

四、@PropertySource 加载指定的配置文件

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

  • @configurationProperties: 默认从全局配置文件中获取值;

  • ①新建person.yml 在这里插入图片描述

  • ②实体类

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Data
@Component
@PropertySource("classpath:person.yml")
public class Person {
    @Value("${name}")
    private String name;
    private Integer age;
    private String high;
    private String like;
}
  • ③执行单元测试结果如下: 在这里插入图片描述

五、配置文件占位符

  • 占位符生成随机数
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

在这里插入图片描述

六、多个yml配置文件的优先级

  • 如果同时存在properties和yml两个配置文件,如果不冲突的话,就会互相补充,反之以properties为主

  • 可以放在以下四个位置 在这里插入图片描述

  • ①根目录下

  • ②根目录的config目录里

  • ③resources目录下的config目录里

  • ④resources目录下 在这里插入图片描述

  • 执行以下看下优先级顺序 ①同时存在:执行的是 根目录的config目录里的配置文件 在这里插入图片描述

②去除①的前提:执行的是 根目录下的配置文件 在这里插入图片描述

③去除①②的前提:执行的是 resources目录下的config目录里的配置文件 在这里插入图片描述

④去除①②三的前提:才会执行 resources目录下 也就是默认所在的位置 在这里插入图片描述

  • 总结顺序:②>①>③>④
    • 根目录的config目录里的配置文件 > 根目录下的配置文件 > resources目录下的config目录里的配置文件 > resources目录下(默认位置)

七、开发时多环境配置的文件的使用

7.1、指定配置文件

  • 在实际开发中,我们可能会有很多套环境,比如开发环境(dev)、灰度环境(pre)、线上环境(prod),我们需要多个配置文件来管理这些环境的配置信息。
  • yml支持多环境配置,如下:在这里插入图片描述
  • 在主配置文件中可以通过:指定根据哪个配置文件来启动项目
spring:
  profiles:
    active: 环境名
  • 试试看:
    • 指定dev 在这里插入图片描述
    • 指定prod 在这里插入图片描述

yml是不是贼方便?大大节省了我们的工作量呀~~

7.2、实际开发中如何自动选择配置文件

  • 在实际工作中我们也不可能说手动去指定配置文件,不然每次发包都得指定,多麻烦哦~
  • 下面我们将上面的方法结合pom.xml组合优化一下,让ta自己识别我们所需打包的环境
  • ①pom文件新增打包选择
<!--打包选择环境-->
	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<env>dev</env>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>pre</id>
			<properties>
				<env>pre</env>
			</properties>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>prod</id>
			<properties>
				<env>prod</env>
			</properties>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
		</profile>
	</profiles>

刷新maven,可以看到我们的maven结构发生了变化: 在这里插入图片描述

  • ②将主配置文件的指定该为占位符
spring:
  profiles:
    active: '@env@'
  • ③选择指定环境启动项目:完美达成我们的需求!!! 在这里插入图片描述

7.3、yml单文件多配置

  • yml还可以实现单文件多配置呢
  • 语法格式如下
server:
  port: 6666
---
server:
  port: 7777
---
server:
  port: 8888
  • properties不支持这种写法

关于application配置文件的玩法到此就告一段落了~


路漫漫其修远兮,吾必将上下求索~ 如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~转载请注明出处哦~