SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”

  前言

  通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址、Eureka注册中心地址、Redis服务地址等,部署环境不一样,打包的时候就要改成对应的配置;常用的环境有本地开发环境dev,本地测试环境dev-test,生产测试环境prod-test,生产环境prod;

  开发的时候我们用dev,项目直接运行,不用改配置;发布本地测试环境的时候,打包之前我们要先改成对应配置;上线前发布生产测试环境的时候要改成对应配置;正式上线发布生产环境的时候要改成对应配置;每次这样改很麻烦,要是不小心漏改了部分地方,还会造成报错,当换一个人来部署时,还得先告诉他需要修改的地方,麻烦;

  那么有什么好办法能解决这个问题呢?我就是不想每次在打包之前改配置,我就直接打包、发布。下面记录一下利用系统环境变量与.yml配置文件的活跃分支实现“智能部署”;

  想了解springboot的配置优先级可以参考这篇大佬的博客:Spring Boot 配置优先级顺序,我这里简单总结一下:

  1. 命令行参数。
  2. 通过 System.getProperties() 获取的 Java 系统参数。
  3. 操作系统环境变量。
  4. 从 java:comp/env 得到的 JNDI 属性。
  5. 通过 RandomValuePropertySource 生成的“random.*”属性。
  6. 应用 Jar 文件之外的属性文件。(通过spring.config.location参数)
  7. 应用 Jar 文件内部的属性文件。
  8. 在应用配置 Java 类(包含“@Configuration”注解的 Java 类)中通过“@PropertySource”注解声明的属性文件。
  9. 通过“SpringApplication.setDefaultProperties”声明的默认属性。

  代码编写

  配置选择分支

  首先我们利用bootstrap.yml先于application.yml加载的顺序,在bootstrap.yml进行分支选择

spring:
  config:
    name: application #配置文件名
  profiles:
    active: ${HUANZI_PROFILES:dev} #选择配置分支,先读取系统环境变量,如果没有则默认值为 dev

  在application.yml里进行写各个分支的配置,分支之间用注释 ---- 隔开

##### 公共 配置 #######
server:
  port: 10086 #端口号
  servlet:
    context-path: / #访问根路径

spring:
  application:
    name: springdatejpa #应用名

---

##### dev 配置 #######
spring:
  profiles: dev

  datasource: #连接数据库
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
msg: 正在使用 dev 配置
---
##### dev-test 配置 #######
spring:
  profiles: dev-test

  datasource: #连接数据库(暂时也先用同一个库,否则项目报错起不来)
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
msg: 正在使用 dev-test 配置
---
##### prod-test 配置 #######
spring:
  profiles: prod-test

msg: 正在使用 prod-test 配置
---
##### prod 配置 #######
spring:
  profiles: prod

msg: 正在使用 prod 配置
---

  配置环境变量

  Windows配置系统环境变量,例如:dev-test

  Linux配置系统环境变量,请看这篇文章:Linux环境变量总结,总结下代码、步骤:

  1、vim ~/.bash_profile

  2、export HUANZI_PROFILES=dev-test

  3、source ~/.bash_profile

  效果

  添加一个checkProfiles测试接口,方便检查分支使用情况:

    @Value("${msg}")
    private String msg;

    /**
     * 检查配置分支
     */
    @RequestMapping("checkProfiles")
    public String checkProfiles() {
        return msg;
    }

  没有设置系统环境变量:默认使用dev

    

  设置系统环境变量后:使用环境变量的值dev-test

    

  后记

  有了“智能部署”功能,我们将所有的分支配置好之后,不管是部署在那个环境,只要在对应的环境设置好对应的系统环境变量,每次都可以直接打包发布,非常方便!当你没空发版,想叫其他同事帮忙发布,但又怕他不太熟悉时,你就告诉他:

  1、更新最新代码

  2、打包、上传

  3、启动项目(先kill掉旧项目、备份旧项目、启动新项目、查看启动日志确保启动过程有无报错)

  妈妈再也不用担心我不会发版了!

原文地址:https://www.cnblogs.com/huanzi-qch/p/10411581.html

时间: 2024-10-11 03:43:56

SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”的相关文章

Ubuntu Linux系统环境变量配置文件

Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行./etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量.~/.profile :  在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行

Ubuntu Linux系统环境变量配置文件【转】

本文转载自:https://my.oschina.net/qinlinwang/blog/30471 Ubuntu Linux系统环境变量配置文件:  /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量. ~/.profile :  在登录时用到的第三个文件 是

如何更改系统环境变量PATH

1. 如何更改系统环境变量PATH? 答:如果是永久更改系统环境变量,对所有用户生效,有两种办法:推荐使用第三种. (1)vim /etc/profile  加入 PATH=$PATH:/usr/local/mysql/bin/ (2)vim /etc/bashrc 加入 PATH=$PATH:/usr/local/mysql/bin/ (3)vim /etc/profile.d/path.sh #!/bin/bash export PATH=$PATH:/ usr/local/mysql/bi

Spring Boot干货系列:(二)配置文件解析

Spring Boot:配置文件解析   前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用"习惯优于配置"(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来.所以,我们要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的默认配置,这就需要了解Spring Boot的配置文件application.properties. 正文 Spring Boot使用了一个全局的配置文件applicat

[十六]SpringBoot 之 读取环境变量和绑定属性对象

1.读取环境变量 凡是被spring管理的类,实现接口EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. 主要是@Configuration,实现接口:EnvironmentAware就能获取到系统环境信息 package me.shijunjie.config; import org.springframework.beans.factory.annotation.Value; import

Linux编程 13 (系统环境变量位置, 环境变量持久化)

一.系统环境变量位置 在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量.这篇学习怎么让环境变量的作用持久化.在此之前,先了解下系统环境变量文件会在哪些位置,当使用bash shell时,bash是如何查找环境变量位置的.下面先来介绍几个文件,这些文件叫启动文件或叫环境文件. bash检查的启动文件(环境文件)取决于你启动bash shell的方式.启动bash shell有3种方式: (1) 登录时的默认登录shell. (2) 交互式shell.

SpringBoot 系列教程之编程式事务使用姿势介绍篇

SpringBoot 系列教程之编程式事务使用姿势介绍篇 前面介绍的几篇事务的博文,主要是利用@Transactional注解的声明式使用姿势,其好处在于使用简单,侵入性低,可辨识性高(一看就知道使用了事务):然而缺点也比较明显,不够灵活,稍不注意,可能就因为姿势不对,导致事务不生效 本文将介绍另外一种事务的使用姿势,借助TransactionTemplate的编程式事务 I. 配置 本篇主要介绍的是jdbcTemplate+transactionTemplate来完成一个编程式事务的实例 de

用 GetEnvironmentVariable 获取常用系统环境变量

//譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取: var   s: string; begin   s := GetEnvironmentVariable('WINDIR');   ShowMessage(s); {C:\WINDOWS} end; %WINDIR%                {系统目录 - C:\WINDOWS} %SYSTEMROOT%            {系统目录 - C:\WINDOWS} %SYSTEMDRIVE%            {

linux系统环境变量.bash_profile/bashrc文件

系统环境变量的查看: [[email protected] ~]# envHOSTNAME=localhost.localdomainSELINUX_ROLE_REQUESTED=TERM=xtermSHELL=/bin/bashHISTSIZE=1000SSH_CLIENT=192.168.7.105 50641 22SELINUX_USE_CURRENT_RANGE=QTDIR=/usr/lib/qt-3.3QTINC=/usr/lib/qt-3.3/includ =========很多 其