SpringBoot多环境配置管理:Profile+YAML+Apollo动态配置

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

🎓博主介绍:Java、Python、js全栈开发 “多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。
📖DeepSeek-行业融合之万象视界(附实战案例详解100+)
📖全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)
👉感兴趣的可以先收藏起来,希望帮助更多的人
在这里插入图片描述

SpringBoot多环境配置管理:Profile+YAML+Apollo动态配置

一、引言

在Spring Boot开发过程中,我们经常会面临不同环境(如开发、测试、生产)需要不同配置的情况。合理管理这些配置对于项目的稳定性和可维护性至关重要。本文将详细介绍如何结合Spring Boot的Profile、YAML配置文件以及Apollo动态配置中心来实现高效的多环境配置管理。

二、Spring Boot Profile与YAML配置基础

2.1 Spring Boot Profile简介

Spring Boot的Profile是一种强大的特性,它允许我们根据不同的环境(如开发、测试、生产)来激活不同的配置。通过@Profile注解或者spring.profiles.active属性,我们可以轻松切换不同环境下的配置。

2.2 YAML配置文件

YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,它在Spring Boot中被广泛用于配置文件。与传统的.properties文件相比,YAML文件具有更好的层次性和可读性。

2.3 基本配置示例

以下是一个简单的Spring Boot项目,使用YAML配置文件和Profile来管理不同环境的配置。

2.3.1 创建主配置文件application.yml
spring:
  profiles:
    active: dev # 默认激活开发环境配置

server:
  port: 8080 # 默认端口

2.3.2 创建开发环境配置文件application-dev.yml
server:
  port: 8081 # 开发环境端口

app:
  config:
    message: "This is a development environment"

2.3.3 创建生产环境配置文件application-prod.yml
server:
  port: 8082 # 生产环境端口

app:
  config:
    message: "This is a production environment"

2.3.4 代码中读取配置
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConfigDemoApplication implements CommandLineRunner {

    @Value("${app.config.message}")
    private String message;

    public static void main(String[] args) {
        SpringApplication.run(ConfigDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Message: " + message);
    }
}

2.4 运行项目并切换环境

我们可以通过以下几种方式来切换不同的环境:

2.4.1 修改application.yml中的spring.profiles.active属性
spring:
  profiles:
    active: prod # 激活生产环境配置
2.4.2 使用命令行参数
java -jar config-demo.jar --spring.profiles.active=prod
2.4.3 使用IDE配置

在IDE中运行项目时,可以在运行配置中添加--spring.profiles.active=prod参数。

三、引入Apollo动态配置中心

3.1 Apollo简介

Apollo(阿波罗)是携程开源的分布式配置中心,它能够集中管理应用的配置,支持配置的动态更新,提供了丰富的权限管理和版本管理功能。

3.2 集成Apollo到Spring Boot项目

3.2.1 添加依赖

pom.xml中添加Apollo客户端依赖:

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>2.0.1</version>
</dependency>
3.2.2 配置Apollo客户端

application.yml中添加Apollo客户端配置:

app:
  id: config-demo # 应用ID

apollo:
  meta: http://apollo-config-server-url # Apollo配置服务地址
  bootstrap:
    enabled: true
    namespaces: application # 配置命名空间
3.2.3 在Apollo控制台创建配置

登录Apollo控制台,创建一个名为config-demo的应用,并在application命名空间下添加配置项:

app.config.message=This is an Apollo configuration
3.2.4 代码中读取Apollo配置
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConfigDemoApplication implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        Config config = ConfigService.getAppConfig();
        String message = config.getProperty("app.config.message", "Default message");
        System.out.println("Message from Apollo: " + message);
    }

    public static void main(String[] args) {
        SpringApplication.run(ConfigDemoApplication.class, args);
    }
}

3.3 动态更新配置

Apollo支持配置的动态更新,当我们在Apollo控制台修改配置后,应用可以实时获取到最新的配置。以下是一个监听配置变化的示例:

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import org.springframework.stereotype.Component;

@Component
public class ApolloConfigListener {

    @ApolloConfigChangeListener
    public void onChange(ConfigChangeEvent changeEvent) {
        Config config = ConfigService.getAppConfig();
        for (String key : changeEvent.changedKeys()) {
            ConfigChange change = changeEvent.getChange(key);
            System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s",
                    change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
        }
    }
}

四、结合Profile和Apollo实现多环境配置管理

4.1 不同环境使用不同的Apollo配置

我们可以在不同的Profile配置文件中指定不同的Apollo配置,例如:

4.1.1 application-dev.yml
app:
  id: config-demo-dev

apollo:
  meta: http://apollo-dev-config-server-url
  bootstrap:
    enabled: true
    namespaces: application
4.1.2 application-prod.yml
app:
  id: config-demo-prod

apollo:
  meta: http://apollo-prod-config-server-url
  bootstrap:
    enabled: true
    namespaces: application

4.2 优先级问题

当同时使用Profile和Apollo配置时,配置的优先级如下:

  1. Apollo配置
  2. 激活的Profile配置文件
  3. 主配置文件application.yml

这样,我们可以在Apollo中配置一些通用的、需要动态更新的配置,而在Profile配置文件中配置一些环境特定的配置。

五、总结

通过结合Spring Boot的Profile、YAML配置文件和Apollo动态配置中心,我们可以实现高效的多环境配置管理。Profile和YAML配置文件可以帮助我们管理不同环境下的静态配置,而Apollo则提供了动态配置更新的能力,使得我们可以在不重启应用的情况下修改配置。这种方式提高了项目的可维护性和灵活性,减少了因环境配置问题导致的错误。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanxbl957

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值