spring boot : spring.profiles.active来解决多个profile的问题

多环境配置-SpringBoot 2.7.2 实战基础 在一个项目的开发过程中,通常伴随着多套环境:本地环境 local、开发环境 dev、集成测试环境 test、用户接受测试环境 uat、预生产环境 pre、生产环境 prod。本节的内容有些脱离真实企业开发,因为在真实的企业开发中,不会只开发一个独立的服务,而是多个微服务。发展至今,云原生也越来越普遍。面对多套环境,通常是”一套代码 + 配置中心“的方式,将代码编译打包后,在启动服务时或服务运行过程中,从配置中心读取配置,保证各个环境代码完全一致,仅配置不同。关于配置中心,在后面的系列文章中会详细介绍。... 阅读详情
AI摘要

本文介绍Spring Boot中如何使用spring.profiles.active进行环境配置切换,包括配置文件的放置位置、命令行参数设置、多环境配置及高级应用示例。

spring boot 入门 使用spring.profiles.active来分区配置

很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置

spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

profile的配置文件可以按照application.properyies的放置位置一样,放于以下四个位置,

  1. 当前目录的 “/config”的子目录下
  2. 当前目录下
  3. classpath根目录的“/config”包下
  4. classpath的根目录下

在这里我们就定义俩个profile文件,application-cus1.properties和application-cus2.properties,

并在俩个文件中都分别写上变量cusvar=cus1和cusvar=cus2
我们在application.properyies也写上,并把profile切换到application-cus1.properties的配置文件

cusvar=cus3
spring.profiles.active=cus1
 可以通过这样子来测试 
@RestController
@RequestMapping("/task")
public class TaskController {
    @RequestMapping(value = {"/",""})
    public String hellTask(@Value("${cusvar}")String cusvar ){
        return "hello task !! myage is " + cusvar;
    }
}
在这里可以看到spring.profiles.active激活的profile不同,打印出来的结果也不一样。

除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,例如数据库配置,这里我们先定义一个接口

 public interface DBConnector {
    public void configure();    
}
分别定义俩个实现类来实现它 
/**
  * 测试数据库
  */
@Component
@Profile("testdb")
public class TestDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("testdb");
    }
}

/**
 * 生产数据库
 */
@Component
@Profile("devdb")
public class DevDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("devdb");
    }
}
通过在配置文件激活具体使用哪个实现类 

spring.profiles.active=testdb

然后就可以这么用了

@RestController
@RequestMapping("/task")
public class TaskController {
    @Autowired DBConnector connector ;
    @RequestMapping(value = {"/",""})
    public String hellTask(){
        connector.configure(); //最终打印testdb     
        return "hello task !! myage is " + myage;
    }

}

除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile


spring.profiles: testdb
spring.profiles.include: proddb,prodmq

以上就是spring boot用profile的作用

通过命令行设置属性值

相信使用过一段时间Spring Boot的用户,一定知道这条命令:java -jar xxx.jar --server.port=8888,通过使用--server.port属性来设置xxx.jar应用的端口为8888。

在命令行运行时,连续的两个减号--就是对application.properties中的属性值进行赋值的标识。所以,

java -jar xxx.jar --server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888,该设置在样例工程中可见,读者可通过删除该值或使用命令行来设置该值来验证。

通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?是的,所以Spring Boot也贴心的提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。

多环境配置

    以上都不是重点,这才是重点,这才是重点,这才是重点,重要的事情说3遍。我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
    对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。
       在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
   application-dev.properties:开发环境
   application-test.properties:测试环境
   application-prod.properties:生产环境
       至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
如:spring.profiles.active=test就会加载application-test.properties配置文件内容
下面,以不同环境配置不同的服务端口为例,进行样例实验。
 
     针对各环境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties
     在这三个文件均都设置不同的server.port属性,如:dev环境设置为8080,test环境设置为9090,prod环境设置为80
     application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
 
测试不同配置的加载:
     执行java -jar xxx.jar,可以观察到服务端口被设置为8080,也就是默认的开发环境(dev)
 
     执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)
 
     执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod)
 
按照上面的实验,可以如下总结多环境的配置思路:
   application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置
   application-{profile}.properties中配置各个环境不同的内容
通过命令行方式去激活不同环境的配置。

多环境高级应用
       在某些情况下,应用的某些业务逻辑可能需要有不同的实现。例如邮件服务,假设EmailService中包含的send(String email)方法向指定地址发送电子邮件,但是我们仅仅希望在生产环境中才执行真正发送邮件的代码,而开发环境里则不发送以免向用户发送无意义的垃圾邮件。
       我们可以借助Spring的注解@Profile实现这样的功能,这样需要定义两个实现EmailService借口的类:

/**
 * 发送邮件接口.
 */
public interface EmailService {
    /**发送邮件*/
    publicvoid send();
}
发送邮件的具体实现(dev-开发环境的代码):
@Service
@Profile("dev") //开发环境的时候.
public class DevEmailServiceImpl implements EmailService{
 
    @Override
    publicvoid send() {
       System.out.println("DevEmailServiceImpl.send().开发环境不执行邮件的发送.");
    }
}


发送邮件的具体实现(prod-生产环境的代码):

@Service
@Profile("prod") //生产环境.
public class ProdEmailServiceImpl2 implements EmailService{
   
    @Override
    publicvoid send() {
       System.out.println("DevEmailServiceImpl.send().生产环境执行邮件的发送.");
       //具体的邮件发送代码.
       //mail.send();
    }
}
@Profile("dev")
表明只有Spring定义的Profile为dev时才会实例化DevEmailService这个类。那么如何设置Profile呢?

在配置文件中指定

 
在application.properties中加入:

spring.profiles.active=dev
 通过命令行参数
java -jar app.jar --spring.profiles.active=dev

 

spring.profiles的使用详解 本文来说下spring.profiles.active和spring.profiles.include的使用与区别。 阅读详情

相关推荐

maven: 使用spring.profiles.active实现多环境配置

在项目开发的过程中会用到多个环境比如:本地环境(开发自测)、开发环境(环境部署自测)、生产环境等,由于不同的环境需要不同的配置信息,为了便于开发使用,通常需要使用profiles进行多环境配置。pom文件中添加如下配置。

玉汝于成 1892

SpringBoot配置文件中spring.profiles.active配置详解

SpringBoot配置文件中spring.profiles.active配置详解 1、多环境配置 我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。 对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring

南瓜的博客 8万+

Spring Profile配置管理:active与include实战解析

Spring Profile是Spring Boot中实现环境隔离的核心机制,通过逻辑分组管理不同环境的配置与Bean定义。其工作原理是基于条件化配置加载,开发者可以灵活切换开发、测试、生产等环境配置。在微服务架构中,Profile技术能有效解决多环境配置差异问题,提升部署效率。实际工程中,spring.profiles.active用于显式激活环境,而spring.profiles.include则实现配置模块化组合,两者配合使用可构建清晰的配置层次结构。本文通过企业级实践案例,详解如何运用Profile

weixin_34099526的博客 362

java编程中spring boot 使用spring.profiles.active来分区配置

java编程中spring boot 使用spring.profiles.active来分区配置   很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置 spring boot允许你通过命名约定按照一定的格式

赵树祥的博客 3754

解决 No active profile set, falling back to 1 default profile: “default“问题以及如何查看spring boot版本号

今天,在启动项目时,出现如此错误: No active profile set, falling back to 1 default profile: "default"。这个问题不是错误,因为它的日志级别是info(log.level = info)。经过一番探究之后,才解决了这个问题,同时,在文章末尾演示如何查看spring boot版本号。...............

念兮为美 5万+

FPGA新手必看:Create HDL Wrapper和Generating Output Products到底该先用哪个?

本文深入解析了FPGA设计中Create HDL Wrapper与Generating Output Products的正确使用顺序,帮助新手避免常见错误。详细介绍了两者的功能差异、执行顺序的底层逻辑以及工程管理的最佳实践,特别适合使用Vivado进行FPGA开发的初学者。

xk7n92h3p5m的博客 1065

springboot多模块

项目的基本结构 其中 blog-core 是核心模块 blog-tool 是工具模块 blog-api 是前端项目 blog-admin 是后台项目 首先父pom文件 <groupId>com.yf</groupId> <artifactId>zfanblog</artifactId> <version>Z-0.0.1</version> <name>zfanblog</n

qq_36296417的博客 907

从2-RSS-1U并联踝关节到双足机器人动态行走:雅可比矩阵与力矩控制实践

本文深入探讨了2-RSS-1U并联踝关节在双足机器人动态行走中的关键作用,详细解析了其设计原理、雅可比矩阵的应用及力矩控制实践。通过优化几何参数和控制算法,实现了低转动惯量、高刚度和紧凑设计,显著提升了机器人的行走稳定性和能量效率。文章还分享了从仿真到实物的跨越经验及未来优化方向。

weixin_42641998的博客 594

spring boot profile配置和启动时no active profile set, falling back to default profiles: default的问题

目录 1.启动时no active profile set, falling back to default profiles: default 2.多profile文件形式: 3.多profile配置激活 3.1通过properties文件指定 3.2通过yml文档块指定 3.3通过configuration中的Program agruments指定 ...

benbenniaono1的博客 25万+

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南)

本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。

weixin_30693683的博客 516

STM32(H7)学习记录-14 XSPI连接DDR SDRAM(HyperBus)

主控芯片是STM32H7S7 ,HyperBusRAM芯片是W956D8MBYA5I。*DQS0(这个引脚是作为RWDS)使用的CubeMX版本是6.13.0。

m0_71918616的博客 1072

spring.profiles.active和spring.profiles.include的使用与区别

spring.profiles.active和spring.profiles.include的区别与使用业务场景优化方式spring.profiles.active属性启动时指定:spring.profiles.include属性配置方法:配置的位置和区别:用示例来使用和区分测试一:测试二:测试三: 业务场景 一套程序可能会被部署到不同的环境。开发、测试、生产环境有不同的配置信息,包括jdbc地址、ip、端口等。如果在同一个配置文件中,每次部署去改配置,会非常麻烦且容易出错。 优化方式 spring.pro

wysghmbb的博客 2万+

二维码扫描与页面跳转的完整流程解析

本文详细解析了二维码扫描与页面跳转的完整流程,从核心原理到前后端实现,涵盖了二维码生成、扫码事件处理、后端验证机制及跳转逻辑等关键环节。特别介绍了如何使用qrcode.js生成二维码、WebSocket处理扫码状态以及JWT令牌验证设计,帮助开发者构建安全高效的扫码跳转系统。

cicd6pipeline的博客 1089

使用spring.profiles.active

项目在开发环境和生产环境的配置是不一样的,所以我们可以利用profile在不同的环境下,用不同的配置文件 Spring Boot允许通过一定的命名规则(application-{profile}.properties){dev :开发环境、test:测试环境、prod:生产环境}在来定义多个配置文件,然后在application.properties中使用spring.profiles.acti...

tealala的博客 1万+

讲透 ABAP CDS 注解名称:简单名、结构化名、@ 与 @<、作用域与分组

本文从开发者角度梳理ABAP CDS注解的命名规则与实战写法,重点解析: 语法规则:@与@<的使用场景、结构化命名规范、作用域唯一性要求 评估机制:ABAP运行时与组件框架的注解处理差异 分组技巧:花括号分组简化重复前缀的书写 实战示例:包含完整CDS View Entity(演示注解分组与@<用法)和ABAP报表(读取打印注解) 常见问题:命名错误导致激活失败、框架忽略等注意事项 最后通过航空预订统计案例,展示如何结合多种注解类型实现业务需求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 262

【雕爷学编程】一款功能强大、易于使用、适用范围广泛的嵌入式Python解释器:MicroPython

1、语法方面:Micropython与Python语法基本相同,但是由于Micropython是专门为嵌入式设备设计的,因此它对标准Python的功能进行了精简和优化,去掉了一些不必要的功能,同时增加了一些嵌入式系统特有的功能。3、库方面:Micropython与Python完全不同的是,它的标准库并不完全与Python的标准库一致,特别是一些底层库和硬件相关的库。5、丰富的库和工具支持:MicroPython有丰富的库和工具支持,如GPIO控制、网络连接、传感器数据采集等,可满足各种应用需求。

雕爷学编程 5194

springboot的spring.profiles.active配置以及加载多个yml文件

场景:spring.profiles.active配置记录:NO.239本例环境: spring-boot:2.2.0.RELEASE jdk:1.8情景一: 在application.yml中配置spring.profiles.active,在pom.xml中配置profiles标签即, <profiles><profile></profile></profiles> 在resources目录下: 默认:application...

zhangbeizhen18的博客 1万+

让 ABAP BAPI_COSTACTPLN_POSTPRIMCOST 不再沉默:一套可落地的参数一致性校验与排错打法

SAP BAPI_COSTACTPLN_POSTPRIMCOST 沉默失败分析与解决方案 问题现象 使用 BAPI_COSTACTPLN_POSTPRIMCOST 上传计划数据时,接口执行不报错但数据未写入 COSP 等计划表,呈现"沉默失败"现象。 根本原因 索引关联断裂:INDEXSTRUCTURE 中 OBJECT_INDEX 和 VALUE_INDEX 未正确关联 COOBJECT 和 PERVALUE/TOTVALUE 表的数据 对象定义冲突:COOBJECT 中同一行填写了多

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 108

spring.profiles.active 未生效问题解决

问题解决历程:一开始配置未生效,然后根据网上的描述都配置了个遍,还是没有解决,最终自己发现启动类里面的配置写死了是dev,一直没有按照自己配置的来,我把第4点操作中的active profiles:去除为空之后,就可以了。 配置上面的profiles,右侧maven会出现如下结构,勾选你要运行的环境: 如果spring.profiles.active=local起作用了,可以看到运行窗口出现下面的标识:...

m0_67393619的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

springboot启动spring.profiles.active和spring.profiles.include影响的区别

application.properties文件内容 spring.profiles.active=test4 pring.profiles.include=test3,test5 version=1 name=Tom application-test2.properties文件内容 pring.profiles.include=test3,test4 version=2 applicatio...

happyblueice的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

spring-boot启动时,指定spring.profiles.active

Maven启动指定Profile通过-P, 如mvn spring-boot:run -Ptest 但这是Maven的Profile。 如果要指定spring-boot的spring.profiles.active, spring-boot 1.x 使用mvn spring-boot:run -Drun.profiles=test, spring-boot 2.x 使用mvn spring-boot:run -Dspring-boot.run.profiles=test。 参考资料:https://docs

m0_67266787的博客 9887

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

spring.profiles.active和spring.profiles.include的使用及区别说明

application.properties中,配置spring.profiles.active=dev的同时指定spring.profiles.include=dev1,dev2。application.properties中,配置spring.profiles.active=dev,application-dev.properties中。spring.profiles.active=dev:用application-dev.properties。

2509_93970086的博客 892

Spring Profile配置详解:active与include实战技巧

Spring Profile是Spring Boot实现多环境配置管理的核心机制,通过环境隔离确保不同部署场景的配置独立性。其原理基于profile激活(active)与配置组合(include)两大功能,active通过环境变量或配置文件指定运行时环境,include则实现配置模块化继承。在微服务架构中,合理使用profile能有效解决开发、测试、生产环境的配置差异问题,特别是结合CI/CD流水线时,可避免环境配置混用风险。本文以spring.profiles.active和spring.profiles

weixin_33726318的博客 424
上一篇: kafka 分区 leader 选举机制原理
下一篇: [推荐]新浪微博如何实现 SSO 的分析
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值