SpringBoot学习笔记5 - 多环境选择实现

本文详细介绍了SpringBoot如何实现多环境配置,包括不同环境的配置文件创建、选择,以及如何通过启动参数快捷切换开发、测试和生产环境。通过案例分析了场景需求,如配置文件命名规则和接口实现类的选择,并提供了结果检测方法。

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

1、多环境选择


1.1、场景描述

以下两种场景下需要进行多环境选择

  • 不同环境运行相同代码
    在应用开发的过程中,同一套程序通常会在多个不同环境下运行。如:开发、测试、生产环境等。每个环境的数据库地址、服务器端口号等配置都会不同。若根据不同环境,手动地去修改这些配置,就会显得繁琐且易错。此时我们更期望定义出几套不同的配置信息,在不同的环境中选择不同的配置。
  • 不同环境执行不同实现类
    在应用开发的过程中,有时不同的环境,需要调用的接口的实现类也是不同的。如开发一个具有短信发送功能的接口中的方法send():开发环境中,send()方法仅需调用短信模拟器即可;而生产环境中,send()则需要调用短信运营商所提供的短信发送接口。此时我们期望能开发两个相关的实现类去实现send()方法,然后在不同的环境中自动选择不同的实现类去执行。

1.2、场景案例

场景案例1:假设生产环境(pro)与开发环境(dev)使用的上下文根与端口号不同。
场景案例2:假设生产环境发送短信的调用方式与测试环境不同。


2、多配置式多环境选择实现


2.1、解决场景案例1

  • 为不同的环境创建不同的配置文件
    注意,SpringBoot的yml文件命名有着严格的要求,只能以application[-{}].yml的方式存在,如application-xxx.yml{}中的内容,如xxx,其实就是profile信息。
    在这里插入图片描述
  • 根据不同的环境分别为配置文件配置信息
    # application-dev.yml
    server:
      port: 8081
      servlet:
        context-path: /devpath
    
    # application-pro.yml
    server:
      port: 8082
      servlet:
        context-path: /propath
    
  • 在application.yml配置文件中决定具体选择哪一配置
    # application.yml,假设默认选择的dev
    spring:
      profiles:
        active: dev
    

2.2、解决场景案例2

  • 创建测试文件

    在这里插入图片描述

  • 定义接口及其实现类

    // 定义接口
    public interface DemoService {
        String send(); // 定义接口方法
    }
    
    @Service
    @Profile("pro") // 指定pro环境
    public class ProService implements DemoService {
        @Override
        public String send() {
            return "生产环境发送短信方式!";
        }
    }
    
    @Service
    @Profile("dev") // 指定dev环境
    public class DevService implements DemoService {
        @Override
        public String send() {
            return "开发环境发送短信方式!";
        }
    }
    
  • 定义Controller类

    @RestController
    public class DemoController {
        @Autowired
        private DemoService service;
    
        @GetMapping("/sendMessage")
        public String sendMessage() {
            return service.send();
        }
    }
    

2.3、结果检测

  • 启动项目
    在启动日志中可以发现,程序如我们所愿,选择的是dev配置。至于pro配置这里就不再重复试验。
    在这里插入图片描述

  • 查看结果

    在这里插入图片描述

3、单配置式多环境选择实现


若我们不希望配置文件过多存在,则我们可以把这些文件统一存放在application.yml文件内:

spring:
  profiles:
    active: dev

---
spring:
  profiles: dev
server:
  port: 8081
  servlet:
    context-path: /devpath

---
spring:
  profiles: pro
server:
  port: 8082
  servlet:
    context-path: /propath

此时就可以去掉之前的application-dev.yml文件与application-pro.yml文件,通过前文所述的方式任意切换环境,此处不再截图赘述。


4、快捷切换多环境配置


多环境配置的情况下,假如我们在做测试的时候,生产环境与测试环境需要切换运行,若每次运行的时候都需要重新打包,这样就会显得特别麻烦,其实我们可以通过启动的时候配置信息即可。

  • 选择测试环境配置并打包
    (图略)

  • 启动并运行项目

    在这里插入图片描述
    在这里插入图片描述

  • 切换环境
    此时我们希望在不重新打包的基础下修改成生产配置,基于此,我们可以添加启动参数的方式切换环境(先关闭之前的启动):

    java -jar xxx.jar --spring.profiles.active=pro
    

    在这里插入图片描述
    可以看到,此时的运行环境已经切换为生产环境了。

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值