SpringBoot多环境配置解决方案

多环境配置的解决方案有很多,我看到不少项目的多环境配置都是使用Maven来实现的,在打包的时候,装入不同环境的配置文件。
这里给出的是SpringBoot结合yml配置文件来实现多环境配置。
配置示例:
server:
  port: 2080
logging:
  level:
    cn.mrxionge.bootdemo: debug
    org.springframework.web: debug
    org.springframework.data: debug
mybatis-plus:
  executor-type: simple
spring:
  datasource:
    #配置hikari连接池
    hikari:
      minimum-idle: 4
      maximum-pool-size: 16
      connection-timeout: 10000
      idle-timeout: 30000
      connection-init-sql: set names utf8mb4
  #指定profiles
  profiles:
    active: dev
---
#开发环境配置
spring:
  profiles: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/demos?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
---
#测试环境配置
spring:
  profiles: test
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.148.50.50:3306/demos?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
---
#正式环境配置
spring:
  profiles: prod
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.100.100:3306/demos?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
在yml中,不同的profiles的配置用三个小横杆来分开。
通常的做法是在yml文件的开头写一些全局的配置,在后面来写差异化配置。
如果某个配置选项,存在于全局配置中,同时也存在于差异化配置中,那么在加载的时候,该配置选项的全局配置将被覆盖。
加载多环境配置
方法主要有两种,1.写在yml中;2.启动时添加命令
在上面给出的配置文件示例中有这样两行配置

在这里插入图片描述

这样就告诉Spring,启动时加载dev环境的配置。但是这样做有一个弊端,如果你使用Jenkins来编译发布项目的话,每次切换环境,都要改一下配置文件的active选项,并且PUSH一次代码。这个时候使用第二种方案更好一些。
在启动程序的时候,加上一行参数即可“–spring.profiles.active=dev”(注意是两个减号)。
这个时候,我们的yml配置就不需要配置active选项了,如果你忘了删除这个配置,配置的加载跟随命令的设置。
Profile注解的使用
这个注解是告诉程序在某个环境下才加载这个Bean。举两个使用例子。
自动任务(Scheduled):

在这里插入图片描述

如上图,Profile注解和Component注解配合使用,来达到在特定环境下加载这个自动任务组件。如果不是设定的环境,那么这个组件不会被加载,这样,里面写的自动任务也不会被执行。(组件是否被加载可以通过IDEA插件功能来看到,Component注解前面有一个画着对勾的小豆子,如果有就是加载了,反之则没有加载)
动态加载JavaConfig:

在这里插入图片描述

这种用法是在特定的环境下加载我们的Config。我们也能通过Bean注解前面的豆子来观察到Bean的加载状态。上图中我配置的是Mybatis Plus的性能分析拦截器,这个组件只在dev环境下需要用到,这样配置的话,在别的环境下就不会加载这个组件了。
【补充】
我们也可以通过多个yml文件来达到多环境配置的效果
例如截图:

在这里插入图片描述

这里yml文件的后缀代表环境名称,和启动命令相匹配
注意:SpringBoot 2.4.0版本对配置文件进行了不小的修改
详细请参考官方文档 Spring Boot Config Data Migration Guide
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值