Skip to content

整理 SpringBoot 知识点(二)

Published: at 18:10

yml 的配置

除了(一)中总结的内容,yml 还有其他的语法,例如可以在 yml 中继续参数引用,例如以下这个例子:

name: Bob
person:
  name: ${name}
  age: 20
@Value("${person.name}")
private String name;
@Value("${person.age}")
private int age;

@Test
void test2(){
	System.out.println(name + ":" + age);
}

运行后输出结果为 Bob:20

这说明在 yml 中还可以继续参数引用,person.name 赋值为了 name 的值,也就是 Bob

另外,yml 中的数组也可以写成行内数组的格式,例如:

list: [hello,world]

yml 中还有一个重要的知识点,就是纯量。比如现在在 yml 中定义如下参数:

msg1: 'hello\n world' #不会识别转义字符,会原样输出
msg2: "hello\n world" #会识别转义字符

上述参数的唯一区别就是 msg1 使用的是单引号,而 msg2 使用的是双引号,我们编写如下代码进行测试:

@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;

@Test
void test3(){
	System.out.println(msg1);
	System.out.println(msg2);
}

输出结果如下:

hello\n world
hello 
 world

这说明,如果我们使用单引号引用字符串,那么不会识别转义字符,会原样输出;如果使用双引号,则会识别转义字符。

那么思考一下,如果定义:

msg3: hello\n world

会有什么效果?经过本人实验,效果其实加单引号效果一样,不会识别转义字符。

另外,再补充一点,即使我们不使用 @Value@ConfigurationProperties 这两个注解,也有别的办法在代码中随时获得配置中的参数,我们可以使用 Environment 这个类中的 getProperty(参数名) 即可,例如:

@Autowired
private Environment env; //import org.springframework.core.env.Environment;

@Test
void test4(){
	System.out.println(env.getProperty("msg1"));
}

Profile 的使用

我们在开发 SpringBoot 应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile 功能就是来进行动态配置切换的。

多 Profile 文件方式

如下图,我现在新建如下三个 yml 文件:

image-20250216225659712

我在 application-dev.yml 文件中写入:

server:
  port: 8082

然后在 application-test.yml 文件中写入:

server:
  port: 8081

如果我 application.yml 中什么也不写,运行后结果如下所示:

image-20250216225901594

可以看到当前并没有设置 Profile,并且当前在 8080 端口运行。

那么此时我如果在 application.yml 中写入以下语句:

spring:
  profiles:
    active: dev

那么运行后的结果如下所示:

image-20250216230054561

可以看到此时的 Profile 被设置了,此时激活的是 dev,并且发现项目在 8082 端口运行,这说明 application-dev.yml 中的配置生效了,同理我如果将 application.yml 换成:

spring:
  profiles:
    active: test

那么项目就会运行在 8081 端口,切换成激活了 test 的 Profile,即 application-test.yml 中的配置生效。

通过这个方法,我们可以快速切换适用于不同环境下的配置。

yml 多文档方式

在多 Profile 文件方式中我们发现,我们需要新建多个 ymlproperties 文件,这样有些许麻烦,那么是否可以将不同环境下的配置写在同一个配置文件中,并用特殊的符号隔开呢?答案是有的,如下:

---
server:
  port: 8081
spring:
  profiles: test
---
server:
  port: 8082
spring:
  profiles: dev
---
spring:
  profiles:
    active: dev

不同的配置文件我们只需要使用 --- 隔开即可。


上一篇文章
域名迁移
下一篇文章
整理 SpringBoot 知识点(一)