处理springboot项目yml文件多个配置不能在idea自由切换的问题,和自己的问题

本文介绍了处理SpringBoot项目中YML文件多环境配置无法在IDEA中自由切换的问题。在项目中,有dev、test和pre三个环境,每个环境对应不同的数据库连接。通过YML文件的分隔符和Maven插件配置,实现环境切换。然而,作者遇到启动报错的情况,问题出在资源文件未被正确读取。通过调整代码位置,确保既能支持本地开发也能适应服务器部署。在服务器上,使用Maven命令按环境打包Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接地址:https://blog.youkuaiyun.com/lmfxrj/article/details/103546488

项目背景:

写了一个小项目,其中有三个环境,分别是: dev环境,test环境,pre环境,

不同环境 会有不同数据库的连接地址,dev是连接阿里云的外网,test和pre都是阿里云服务器的内网;

具体配置如下

yml文件如下:

spring:
  profiles:
   
---
# 开发环境

spring:
  profiles: dev
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
---
# 测试环境
spring:
  profiles: test
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
---
# 发布环境
spring:
  profiles: pre
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource

三个"---" 一定要存在,用于分割,否则报错

 那么系统如何取值呢  

pom配置插件如下:

   用于读取配置

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
    
### Spring Boot多环境YML配置方法 在Spring Boot中,可以通过`application.yml`或`application.properties`文件来实现多环境配置。以下是关于如何通过YAML文件完成多环境配置的方法。 #### 1. 基本概念 Spring Boot支持多种激活方式来切换不同的环境配置。默认情况下,Spring Boot会加载名为`application.yml`的全局配置文件。为了支持多环境配置,可以在同一个YAML文件中定义多个profile-specific配置块[^1]。 #### 2. YAML文件结构 在一个单一的`application.yml`文件中,可以按照如下格式编写: ```yaml server: port: 8080 spring: profiles: active: dev # 设置当前活动的profile为dev --- spring: config: activate: on-profile: dev # 当前配置仅适用于开发环境(dev) server: port: 8081 # 开发环境下使用的端口 --- spring: config: activate: on-profile: prod # 当前配置仅适用于生产环境(prod) server: port: 8082 # 生产环境下使用的端口 ``` 上述示例展示了如何在同一文件中设置不同环境下的服务器端口号。当指定`spring.profiles.active=dev`时,应用将以开发模式启动并监听8081端口;而如果指定`prod`,则会使用8082端口。 #### 3. IntelliJ IDEA中的配置 要在IntelliJ IDEA中运行特定的profile,需调整项目的运行/调试配置: - 打开Run菜单 -> Edit Configurations... - 在VM options字段添加参数 `-Dspring.profiles.active=dev` 或者其他所需的profile名称。 这样,在每次启动应用程序时都会自动加载对应的profile配置。 #### 4. 使用外部化配置文件 除了将所有profiles写入单个`application.yml`外,还可以分别创建单独的配置文件如`application-dev.yml`, `application-prod.yml`等,并确保根目录下存在一个基础`application.yml`用于声明active profile: ```yaml spring: profiles: active: dev ``` 之后只需维护各自专属的配置文档即可。 ```python if __name__ == "__main__": SpringApplication.run(YourApplicationClass.class, args); ``` 以上代码片段展示了一个标准的Spring Boot入口类调用形式,无需额外修改就能适配多环境需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值