Spring Boot 多环境配置

news2025/2/25 19:16:13

Spring Boot 多环境配置

在实际开发中,应用程序通常需要在不同的环境中运行,例如开发环境、测试环境和生产环境。每个环境可能需要不同的配置,包括数据库连接、日志级别、接口地址等等。Spring Boot 提供了多种方法来处理多环境配置,本文将介绍如何使用 Spring Boot 处理多环境配置,并提供示例代码来帮助读者更好地理解。

在这里插入图片描述

Spring Boot 多环境配置的基本原理

Spring Boot 多环境配置的基本原理是使用不同的配置文件来为不同的环境提供不同的配置。Spring Boot 默认使用 application.propertiesapplication.yml 作为配置文件,但是它也支持使用不同的配置文件来为不同的环境提供不同的配置。具体来说,Spring Boot 支持以下配置文件命名规则:

  • application-{profile}.properties
  • application-{profile}.yml

其中,{profile} 表示环境的名称,例如 devtestprod。当应用程序启动时,Spring Boot 会根据当前的环境选择相应的配置文件来加载配置。

默认情况下,Spring Boot 使用 application.propertiesapplication.yml 作为默认的配置文件。如果需要使用其他的配置文件,可以通过 spring.profiles.active 属性来指定。例如,如果要在开发环境中使用 application-dev.propertiesapplication-dev.yml 配置文件,可以在 application.propertiesapplication.yml 中添加以下配置:

spring.profiles.active=dev

当应用程序启动时,Spring Boot 会自动加载 application-dev.propertiesapplication-dev.yml 文件中的配置。如果没有指定 spring.profiles.active 属性,则默认使用 application.propertiesapplication.yml 文件中的配置。

使用 YAML 配置多环境配置

YAML 是一种基于缩进的格式,用于表示数据结构。在 Spring Boot 中,可以使用 YAML 格式来配置多环境配置。下面是一个示例 YAML 配置文件:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost/mydb
    username: root
    password: password
---
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://localhost/mydb_dev
    username: dev
    password: dev_password
---
spring:
  profiles: prod
  datasource:
    url: jdbc:mysql://localhost/mydb_prod
    username: prod
    password: prod_password

在这个示例 YAML 配置文件中,定义了三个配置块,分别为默认配置、开发环境配置和生产环境配置。在默认配置中,定义了端口号和数据库连接的用户名和密码。在开发环境配置中,重新定义了数据库连接的 URL、用户名和密码。在生产环境配置中,重新定义了数据库连接的 URL、用户名和密码。

使用 Properties 配置多环境配置

除了 YAML 格式外,Spring Boot 还支持使用 Properties 格式来配置多环境配置。下面是一个示例 Properties 配置文件:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=root
spring.datasource.password=password

---

spring.profiles=dev
spring.datasource.url=jdbc:mysql://localhost/mydb_dev
spring.datasource.username=dev
spring.datasource.password=dev_password

---

spring.profiles=prod
spring.datasource.url=jdbc:mysql://localhost/mydb_prod
spring.datasource.username=prod
spring.datasource.password=prod_password

在这个示例 Properties 配置文件中,也定义了三个配置块,分别为默认配置、开发环境配置和生产环境配置。在默认配置中,定义了端口号和数据库连接的用户名和密码。在开发环境配置中,重新定义了数据库连接的 URL、用户名和密码。在生产环境配置中,重新定义了数据库连接的 URL、用户名和密码。

使用命令行参数配置多环境配置

除了使用配置文件外,还可以通过命令行参数来配置多环境配置。Spring Boot 支持使用 --spring.profiles.active 命令行参数来指定当前的环境。例如,以下命令将在开发环境中启动应用程序:

$ java -jar myapp.jar --spring.profiles.active=dev

使用环境变量配置多环境配置

除了使用配置文件和命令行参数外,还可以使用环境变量来配置多环境配置。Spring Boot 支持使用 SPRING_PROFILES_ACTIVE 环境变量来指定当前的环境。例如,以下命令将在生产环境中启动应用程序:

$ export SPRING_PROFILES_ACTIVE=prod
$ java -jar myapp.jar

示例代码

下面是一个使用 YAML 配置多环境配置的示例代码。在这个示例代码中,定义了一个简单的 REST API,用于获取当前环境的配置信息。可以通过访问 http://localhost:8080/env 来获取当前环境的配置信息。

@RestController
public class EnvController {
    
    private final Environment environment;
    
    public EnvController(Environment environment) {
        this.environment = environment;
    }
    
    @GetMapping("/env")
    public Map<String, String> getEnv() {
        Map<String, String> env = new LinkedHashMap<>();
        env.put("activeProfiles", Arrays.toString(environment.getActiveProfiles()));
        env.put("serverPort", environment.getProperty("server.port"));
        env.put("dataSourceUrl", environment.getProperty("spring.datasource.url"));
        env.put("dataSourceUsername", environment.getProperty("spring.datasource.username"));
        env.put("dataSourcePassword", environment.getProperty("spring.datasource.password"));
        return env;
    }
}

application.yml 配置文件中,定义了三个配置块,分别为默认配置、开发环境配置和生产环境配置。在默认配置中,定义了端口号和数据库连接的用户名和密码。在开发环境配置中,重新定义了数据库连接的 URL、用户名和密码。在生产环境配置中,重新定义了数据库连接的 URL、用户名和密码。

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost/mydb
    username: root
    password: password
---
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://localhost/mydb_dev
    username: dev
    password: dev_password
---
spring:
  profiles: prod
  datasource:
    url: jdbc:mysql://localhost/mydb_prod
    username: prod
    password: prod_password

application.properties 配置文件中,定义了默认配置的端口号和数据库连接的用户名和密码。

server.port=8080
spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=root
spring.datasource.password=password

在这个示例代码中,使用 Environment 对象来获取当前环境的配置信息。在 getEnv() 方法中,使用 environment.getActiveProfiles() 方法获取当前活跃的环境,使用 environment.getProperty() 方法来获取配置信息。例如,environment.getProperty("server.port") 将返回当前环境的端口号。

总结

本文介绍了 Spring Boot如何处理多环境配置。通过使用不同的配置文件、命令行参数、环境变量等方式,可以为不同的环境提供不同的配置。在实际开发中,多环境配置非常重要,可以帮助开发人员更好地管理应用程序的配置,从而提高应用程序的可维护性和可扩展性。

本文提供了使用 YAML 格式和 Properties 格式配置多环境配置的示例代码,并介绍了如何使用命令行参数和环境变量配置多环境配置。通过这些示例代码,读者可以更好地理解 Spring Boot 如何处理多环境配置,并在实际开发中应用这些技术。

如果您需要更深入地了解 Spring Boot 的多环境配置,可以参考 Spring Boot 官方文档,或者阅读相关的书籍和文章。希望本文对读者有所帮助,谢谢阅读。

参考文献

  • Spring Boot Reference Guide. https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
  • “Spring Boot - Profiles”. https://www.tutorialspoint.com/spring_boot/spring_boot_profiles.htm
  • “Spring Boot - Externalized Configuration”. https://www.tutorialspoint.com/spring_boot/spring_boot_externalized_configuration.htm
  • “Spring Boot 2 配置文件详解”. https://www.cnblogs.com/jpfss/p/10041344.html

附:完整示例代码

application.yml

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost/mydb
    username: root
    password: password
---
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://localhost/mydb_dev
    username: dev
    password: dev_password
---
spring:
  profiles: prod
  datasource:
    url: jdbc:mysql://localhost/mydb_prod
    username: prod
    password: prod_password

application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=root
spring.datasource.password=password

EnvController.java

@RestController
public class EnvController {
    
    privatefinal Environment environment;
    
    public EnvController(Environment environment) {
        this.environment = environment;
    }
    
    @GetMapping("/env")
    public Map<String, String> getEnv() {
        Map<String, String> env = new LinkedHashMap<>();
        env.put("activeProfiles", Arrays.toString(environment.getActiveProfiles()));
        env.put("serverPort", environment.getProperty("server.port"));
        env.put("dataSourceUrl", environment.getProperty("spring.datasource.url"));
        env.put("dataSourceUsername", environment.getProperty("spring.datasource.username"));
        env.put("dataSourcePassword", environment.getProperty("spring.datasource.password"));
        return env;
    }
}

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
</dependencies>

备注

以上示例代码可以在 Spring Boot 2.x 环境中运行,并使用 MySQL 数据库作为示例。如果需要在其他环境中运行,需要根据实际情况进行修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】1901-2021年1km分辨率逐月平均气温栅格数据(全国/分省/免费获取)

气温数据是我们最常用的气象指标之一&#xff0c;之前我们给大家分享过1950-2022年0.1 x 0.1精度的逐月平均气温栅格数据和逐年平均气温栅格数据&#xff08;均可查询之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是精度更高的气温栅格数据——1901-2021年1km分…

小兔鲜项目----Pinia

目录 Pinia快速入门 什么是Pinia 添加Pinia到Vue项目 使用Pinia实现计数器案例 getters实现 action如何实现异步 storeToRefs Pinia的调试 项目起步-初始化项目并使用git管理 创建项目并精细化配置 src目录调整 git 管理项目 项目起步-配置别名路径联想提示 什么是…

Cesium教程(四):调用地形服务

Cesium提供了多种现有地形数据服务接口&#xff0c;并且支持自定义地形数据。 CesiumTerrainProvider&#xff1a;高精度全球地形数据&#xff0c;附有光照和水面效果。地形切片使用quantized-mesh v1.0格式&#xff0c;Cesium使用CesiumTerrainProvider API调用该服务。 Goo…

git bash下载gitee项目报错:no such file found

错误再现 解决方案&#xff1a;设置SSH Key 第一步&#xff1a;右击git bash here&#xff0c;命令行输入 $ git config --global user.name “hcshow” //配置用户名 $ git config --global user.email “hcitlifehotmail.com” //配置用户邮箱地址 此时可以查看用户名等信息…

【C++ 学习 ⑦】- 模板初阶(函数模板和类模板)

目录 一、前言 二、函数模板 2.1 - 基本概念和原理 2.2 - 定义格式 2.3 - 实例化详解 2.3.1 - 隐式实例化 2.3.2 - 显示实例化 2.4 - 模板参数的匹配原则 三、类模板 3.1 - 定义格式 3.2 - 实例化 参考资料&#xff1a; C函数模板&#xff08;模板函数&#xff09;详…

chatgpt赋能Python-python_for_line_in_f

Python for Line in F: 一种高效的文件读写方法 对于Python编程工程师来说&#xff0c;文件的读写操作是一项必备技能。但是&#xff0c;如果你还在使用传统的逐行读取方法&#xff0c;那么你可能需要了解一种更加高效的文件读写方法&#xff1a;Python for Line in F。 什么…

使用亚马逊云科技Amazon VPC Lattice简化服务间的连接、安全和监控

在亚马逊云科技re:Invent 2022中&#xff0c;亚马逊云科技介绍了Amazon VPC Lattice预览版&#xff0c;这是Amazon Virtual Private Cloud&#xff08;Amazon VPC&#xff09;的一项新功能&#xff0c;可通过一致的方式连接、保护和监控服务之间的通信。借助Amazon VPC Lattice…

十八、map和set

文章目录 一、关联式容器&#xff08;一&#xff09;序列式容器&#xff1a;&#xff08;二&#xff09;关联式容器&#xff1a; 二、树形结构与哈希结构&#xff08;一&#xff09;树型结构&#xff08;二&#xff09;哈希结构 三、键值对四、set五、multiset六、map&#xff…

有没有一种支持对象建模、数据库建模和低代码能力的工具,用来解放程序员生产力呢?

1. 简介 作为一个程序员&#xff0c;很多时候在面对项目开发工期短、任务重、功能复杂、压力大&#xff0c;同时还得迎合领导或者甲方的要求提供研发设计文档时&#xff0c;往往很苦恼&#xff0c;因为随着软件项目的迭代&#xff0c;很难保持输出与代码一致的数据模型和架构模…

Configuring MySQL for a SSD based SAN

Configuring MySQL for a SSD based SAN (Doc ID 2673662.1)正在上传…重新上传取消To Bottom In this Document APPLIES TO: MySQL Server - Version 5.6 and later Information in this document applies to any platform. GOAL Considering a Virtualized environment wit…

chatgpt赋能Python-python_ip归属地

Python IP归属地查询 在网络安全领域&#xff0c;IP地址归属地查询是一项非常重要的任务。很多时候我们需要知道某个IP地址的归属地以解决一些安全问题。Python语言在这方面也发挥了巨大的作用&#xff0c;有各种成熟的IP地址归属地查询库。在本文中&#xff0c;我们将介绍如何…

CMOS摄像头驱动分析-i2c驱动

CMOS摄像头驱动分析-i2c驱动 文章目录 CMOS摄像头驱动分析-i2c驱动设备树内容module_i2c_driver宏分析ov2640_i2c_driverov2640_probe 设备树内容 ov2640: camera0x30 {compatible "ovti,ov2640";reg <0x30>;status "okay";pinctrl-names "…

三、Mybatis从入门到入土

一、什么是Mybatis 1&#xff09;MyBatis 是一款优秀的持久层&#xff08;DAO层&#xff09;框架 2&#xff09;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 3&#xff09;MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将…

程序员做爬虫有哪些痛点

很多网站会设置反爬虫机制&#xff0c;如验证码、IP封禁、请求频率限制等&#xff0c;这些机制会增加爬虫的难度。 程序员做爬虫时&#xff0c;可能会遇到以下难点&#xff1a; 1、反爬虫机制 许多网站会设置反爬虫机制&#xff0c;如验证码、IP封禁、请求频率限制等&#x…

ICV: ADAS SoC市场规模将在2024年迎来较大突破

随着先进驾驶辅助系统&#xff08;ADAS&#xff09;的出现和对于自动驾驶的追求&#xff0c;汽车行业正在经历快速转型。这些技术进步的核心是ADAS SoC&#xff0c;它是实现多个功能集成于单一平台的关键组件。ADAS SoC已经成为智能汽车的重要驱动因素&#xff0c;彻底改变了安…

Linkage Mapper Toolkit中的 Barrier Mapper 功能解析(含实际案例分析)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 文章目录 🎉引言🌟博客介绍🌟Linkage Mapper 工具和 ArcGIS 简介🎉Barrier Mapper 和 ArcGIS 的集成</

python内置模块之logging

文章目录 1 开始使用 logging 1.1 第一个程序1.2 日志级别1.3 输出格式 2 输出日志到文件 2.1 使用 basicConfig 配置文件路径2.2 logging 模块化设计2.3 自动分割日志文件 最近因为一个小需求&#xff0c;需要保存日志到文件中。因为平时调试都只是用print&#xff0c;当不…

Cesium教程(五):加载自定义地形数据

目录 1、准备数据 2、转化数据 3、发布数据 4、加载数据 5、数据下载地址 1、准备数据 可以从NASA网站免费下载30m空间分辨率高程模型数据 在地图上选择区域之后&#xff0c;点击左侧对应区域下载即可&#xff1a; 也可以在地理空间数据云上下载所需要的地区数据地理空间数…

Zeebe系列(1)-- Zeebe官方管理台使用

Zeebe管理台创建 注册zeebe账号&#xff0c;可以获得30天的免费试用期。可以在官方提供的管理台页面进行zeebe集群的创建等操作。 Accounts | Sign Up - Camunda Zeebe管理台是进行流程管理的界面&#xff0c;主要包括5个组件。 Console Console&#xff1a;Zeebe的控制台&…

Java高并发核心编程—内置锁原理篇

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; 导致并发修改的原因 例如Java中的i等指令并非是原子操作&#xff0c;而是三条指令的集合&#xff1a;“内存取值”、“寄存器增加1”、“存值到内存” 。 因此&#xff0c;如果是多线程并发使用C…