当前位置: 首页 > news >正文

SpringBoot 的多配置文件

文章目录

    • SpringBoot 的多配置文件
      • spring.profiles.active 配置
      • @Profile 和 @ActiveProfiles 注解

SpringBoot 的多配置文件

spring.profiles.active 配置

默认情况下,当你启动 SpringBoot 项目时,会在日志中看到如下一条 INFO 信息:

No active profile set, falling back to default profiles: default

image.png

这条消息是在告诉你,由于你没有激活、启用某个配置文件,SpringBoot 使用了默认的配置文件,也就是 application.propertiesapplication.yml当然,这并不是什么错误。

SpringBoot 允许我们的项目提供多配置文件,并『激活、启用』其中的某一个。这些配置文件的命名规则为:application-xxx.propertiesapplication-xxx.yml

提供多个配置文件之后,你在 SpringBoot 默认加载的配置文件 application.propertiesapplication.yml 中只用写一个配置项,用以激活、启用某个 .properties.yml 即可。例如:

spring:profiles:active: dev

上例中的 dev 就是 application-xxx.propertiesapplication-xx.yml 中的那个 xxx 。

现在你再启动 SpringBoot,你会看到如下的 INFO 信息:

The following profiles are active: dev

这表示 SpringBoot 本次启动使用的就是这个配置文件。

@Profile 和 @ActiveProfiles 注解

了解

@Profile 注解配合 spring.profiles.active 参数,也可以实现不同环境下(开发、测试、生产)配置参数的切换。

另外,@ActiveProfiles 注解(在测试环境中)可以起到 spring.profiles.active 参数的作用。

@Configuration
public class MyConfiguration {@Bean@Profile("xxx")public Human tommy() {return new Human("tom", 20);}@Bean@Profile("yyy")public Human jerry() {return new Human("jerry", 19);}}

在上面的配置中:

  • 存在 2 套配置:xxxyyy
  • name 为 tommy 的 Human Bean 仅存在于 xxx 的配置套餐中;
  • name 为 jerry 的 Human Bean 仅存在于 yyy 的配置套餐中;

在 application.yml 配置文件通过 active 配置激活启动一个:

spring:profiles:active: yyy

我们可以在 JUnit 中验证结果:

@SpringBootTest
class AppTest {@Autowiredprivate Human human;@Testpublic void demo() {System.out.println(human);  // 这里输出的是 jerry Human Bean}
}

在测试类的使用中,你也可以将 application.yml 中的 active 配置项去掉,转而在测试类的头上使用 @ActiveProfiles 注解,也能起到同样效果:

@SpringBootTest
ActiveProfiles(profiles = "xxx")
class AppTest {...
}
http://www.lryc.cn/news/370206.html

相关文章:

  • [Java基础揉碎]网络相关概念
  • UE5 Sequencer 使用指导 - 学习笔记
  • Web前端项目源码:深入解析与未来探索
  • MyBatis的配置文件,即:src->main->resources的配置
  • completefuture造成的rpc重试事故
  • 6月11号作业
  • 探究Vue源码:深入理解diff算法
  • qt自适应图片
  • 【区块链】解码拜占庭将军问题:区块链共识机制的哲学基石
  • MCK主机加固:智能科技,构筑网络安全的铜墙铁壁
  • OpenCV 双目相机标定
  • WPF/C#:异常处理
  • 2024年跨平台应用解决方法
  • 人工智能ChatGPT的多种应用:提示词工程
  • OceanBase v4.2 解读:tenant=all 语义优化,提升易用性
  • 理论和实验
  • Linux 常用命令 - userdel 【删除用户】
  • 等保测评和安全运维
  • Java课程设计:基于Java+Swing+MySQL的图书管理系统(内附源码)
  • WireGuard网络架构及配置详解
  • VB.NET实现上位机自动识别可用串口
  • Node.js版本管理工具-NVM
  • 【react】useEffect 快速上手
  • docker容器部署jenkins
  • 第十四章 享元模式
  • ThinkBook 16 2024 Ubuntu 触控板问题解决
  • qt qDebug兼容LOGE
  • 【Ardiuno】实验使用ESP32单片机连接Wifi(图文)
  • 常用的五大数据可视化工具测评分享
  • 什么是校园抄表系统?