夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  76 随笔 :: 24 文章 :: 22 评论 :: 24万 阅读

一、简介

在我们实际的开发中,有些配置文件在开发、测试或生产等不同环境中可能是不同的,例如数据库连接、redis等等相关的配置信息等。那我们如何在不同环境中自动实现配置的切换呢?

Spring给我们提供了 profiles 机制,下面看看在SpringBoot 中是如何使用 Profiles 功能的。

在 SpringBoot 中多环境配置文件名需要使用  application-{profile}.properties  的格式,这里的  **{profile}**  对应的是你的环境标识。例如:

application-dev.properties  — 这是开发环境
application-pro.properties — 这是生产环境 

二、场景使用

1、配置文件的使用方法

Resource目录下新建两个配置文件,分别命名为 application-dev.properties 以及 application-pro.yml,为了方便看到区别,我们分别在三个配置文件中分别指定tomcat启动端口:

 application-dev.properties

server.port=9091

application-pro.yml

server:
  port: 7091

 application.properties

server.port=8001
#spring.profiles.active属性来设置
spring.profiles.active=pro

程序会默认加载 application.properties中的配置,我们想要使用对应的环境,

只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的 {profile},这里就是指devpro

通过运行结果。我们可以看出,运行后的端口对应着 application-pro.yml 配置文件的 7091

2、注解的用法

@Profile 注解

复制代码
@Configuration
public class MyConfig {

    /*
        相当于一个条件
        如果application.properties 中active配置为 pro ,
        则这个Bean交由Spring进行管理
    */
    @Bean
    @Profile("pro")
    public UsersBean getUser1(){
        return new UsersBean();
    }
    /*
        相当于一个条件
        如果application.properties 中active配置为 dev ,
        则这个Bean交由Spring进行管理
    */
    @Bean
    @Profile("dev")
    public UsersBean getUser2(){
        return new UsersBean();
    }
    /*
        没有加@Profile注解,则任何环境都会生效
        则这个Bean交由Spring进行管理
    */
    @Bean
    public UsersBean getUser3(){
        return new UsersBean();
    }
}
View Code
复制代码

Spring获取Bean进行管理时,这个注解相当于一个条件,

如果 active 激活的是 pro,那么则获取上面那个Bean(getUser1方法)

如果 active 激活的是 dev,那么则获取中间那个Bean(getUser2方法)

注意如果 application.properties 中没有配置 spring.profiles.active,则会取默认的Bean(getUser3方法),如果没有默认则没有符合条件的Bean。

 3、命令行的方式

上面两种激活 profile 的方式,即在 application.properties 中指定属性 spring.profiles.active 的值和采用 @Profile 注解方式。

但是这种方式在实际项目中的使用并不合适,因为你每次提交代码还要手动修改 spring.profiles.active 的值。

所以我们还可以使用命令行的方式,SpringBoot 的程序一般是打成jar包,在使用 java -jar 命名执行jar包的时候,可以再后面加上: 

--spring.profiles.active=dev;

我们的jar文件名为 spring-boot-Demo,那么我们我们启动项目的命令行为:

java -jar  spring-boot-Demo-0.0.1.jar --spring.profiles.active=pro

采用命令行的方式,在 application.properties 配置文件中就不需要添加 spring.profiles.active 配置信息了,只需要在启动项目时加入后面的命令。

4、Idea的配置方式。

假如我们实际开发环境中是用Idea进行开发的话,还可以修改启动配置,进行程序启动类传参:

启动的时候传入参数:

--sping-profiles-active=dev

 

 也可以使用虚拟机传参,这种方式和程序类启动传参类似。给虚拟机传入参数命令:

-Dspring.profiles.active=dev

 

这两种传参方式在开发中都可以实现激活 spring.profiles.active

但是实际环境中不建议使用这种方式,因为服务器上不太可能有Idea这种工具。

 

posted on   夜、微凉  阅读(1112)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
历史上的今天:
2017-03-24 .Net 上传文件和下载文件
点击右上角即可分享
微信分享提示