网站首页 > java教程 正文
前言
通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址、Eureka注册中心地址、Redis服务地址等,部署环境不一样,打包的时候就要改成对应的配置;常用的环境有本地开发环境dev,本地测试环境dev-test,生产测试环境prod-test,生产环境prod;
开发的时候我们用dev,项目直接运行,不用改配置;发布本地测试环境的时候,打包之前我们要先改成对应配置;上线前发布生产测试环境的时候要改成对应配置;正式上线发布生产环境的时候要改成对应配置;每次这样改很麻烦,要是不小心漏改了部分地方,还会造成报错,当换一个人来部署时,还得先告诉他需要修改的地方,麻烦;
那么有什么好办法能解决这个问题呢?我就是不想每次在打包之前改配置,我就直接打包、发布。下面记录一下利用系统环境变量与.yml配置文件的活跃分支实现“智能部署”;
想了解springboot的配置优先级可以参考这篇大佬的博客:Spring Boot 配置优先级顺序,我这里简单总结一下:
- 命令行参数。
- 通过 System.getProperties() 获取的 Java 系统参数。
- 操作系统环境变量。
- 从 java:comp/env 得到的 JNDI 属性。
- 通过 RandomValuePropertySource 生成的“random.*”属性。
- 应用 Jar 文件之外的属性文件。(通过spring.config.location参数)
- 应用 Jar 文件内部的属性文件。
- 在应用配置 Java 类(包含“@Configuration”注解的 Java 类)中通过“@PropertySource”注解声明的属性文件。
- 通过“SpringApplication.setDefaultProperties”声明的默认属性。
代码编写
配置选择分支
首先我们利用bootstrap.yml先于application.yml加载的顺序,在bootstrap.yml进行分支选择
spring:
config:
name: application #配置文件名
profiles:
active: ${HUANZI_PROFILES:dev} #选择配置分支,先读取系统环境变量,如果没有则默认值为 dev
在application.yml里进行写各个分支的配置,分支之间用注释 ---- 隔开
请看官网截图介绍:你可以在一个yml里面指定多个具体的profile配置,通过配置spring.profiles,判断使用哪个配置
##### 公共 配置 #######
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 配置
---
当然也可以用后缀.properties的配置文件,来进行根据活跃的profiles分支选择
创建application-dev.properties,application-dev-test.properties...文件,将具体配置放在具体文件里,同样与yml效果一致
PS:默认情况下yml没有中文乱码问题,而properties有
另外,官网给出了一个yml的缺点,就是不能使用@PropertySource注释加载yml文件
更多yml介绍请看官网:24.7 Using YAML Instead of Properties https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-external-config-yaml
更多配置文件介绍请看官网:24. Externalized Configuration https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-external-config
25. Profiles https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-profiles
配置环境变量
Windows配置系统环境变量,例如:dev-test
Linux配置系统环境变量,请看这篇文章:Linux环境变量总结,总结下代码、步骤:
1、vim ~/.bash_profile
2、export HUANZI_PROFILES=dev-test ,esc :wq保存退出
3、source ~/.bash_profile
4、查看环境变量 echo $HUANZI_PROFILES ,如果输出dev-test设置成功
效果
添加一个checkProfiles测试接口,方便检查分支使用情况:
##### 公共 配置 #######
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 配置
---
没有设置系统环境变量:默认使用dev
设置系统环境变量后:使用环境变量的值dev-test
后记
有了“智能部署”功能,我们将所有的分支配置好之后,不管是部署在那个环境,只要在对应的环境设置好对应的系统环境变量,每次都可以直接打包发布,非常方便!当你没空发版,想叫其他同事帮忙发布,但又怕他不太熟悉时,你就告诉他:
1、更新最新代码
2、打包、上传
3、启动项目(先kill掉旧项目、备份旧项目、启动新项目、查看启动日志确保启动过程有无报错)
妈妈再也不用担心我不会发版了!
版权声明
作者:huanzi-qch
出处:https://www.cnblogs.com/huanzi-qch
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
猜你喜欢
- 2024-09-27 Linux下环境变量如何设置(在linux中设置环境变量的命令)
- 2024-09-27 Linux环境变量配置(linux环境变量配置教程)
- 2024-09-27 浅谈Linux中的环境变量(linux环境变量有哪些)
- 2024-09-27 Linux中使用java和javac命令及注意事项
- 2024-09-27 Python 环境搭建(python环境搭建和pycharm安装)
- 2024-09-27 linux 设置环境变量方法(linux中设置环境变量的命令)
- 2024-09-27 Linux,CentOS环境,ZooKeeper集群安装配置
- 2024-09-27 JAVA_HOME环境配置(如何设置java_home环境变量)
- 2024-09-27 操作系统安装JAVA环境(安装配置java环境)
- 2024-09-27 Linux环境变量配置全攻略(linux如何配置环境变量 命令)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)