开发环境的配置提生产了!这坑怎么填?

拓痕
• 阅读 2238
授人以鱼不如授人以渔。大家好,我是Java课代表。今天跟大家分享一下SpringBoot基于profile的一些配置。
想要获取更多Java信息,请关注公众号:Java课代表

0 痛点

开发过程中,我们一般会有若干个不同的环境,如:开发环境,生产环境。一般情况下,不同环境下的程序配置是不同的。如果每次切换环境都去修改配置文件,一是比较麻烦,二是容易出错。

例如:开发阶段,我们可以采用嵌入式的H2数据库,但生产环境中使用mysql。

1 YAML文件

SpringBoot采用YAML(/ˈjæməl/)文件来管理配置,其优点是简洁明了,可读性好。

实现多配置有两种方式:

  1. 单个yml配置文件中编写不同配置
  2. 编写多个yml文件,代表不同的配置

单个yml文件

在一个yml文件中,通过 --- 分隔多个不同配置,根据spring.profiles.active 的值来决定启用哪个配置,例如:

#公共配置
spring:
  profiles:
    active: pro #使用名为pro的配置,这里可以切换成dev
  datasource:
    url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    password: 123456
    username: root
---
#开发环境配置
spring:
  profiles: dev #profiles属性代表配置的名称

server:
  port: 8080
---
#生产环境配置
spring:
  profiles: pro

server:
  port: 80

多个yml文件

将配置编写在多个yml文件中,根据spring.profiles.active 的值来决定启用哪个配置。

配置文件规则如下:

  1. 文件命名需要符合application-{profile}.yml的格式,如:application-dev.yml
  2. 相同配置写到application.yml中,不同的环境配置写到不同的yml文件中

例如:

application.yml

#公共配置
spring:
  profiles:
    active: pro #使用名为pro的配置,这里可以切换成dev
  datasource:
    url: jdbc:mysql://localhost:3306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    password: 123456
    username: root

application-dev.yml

server:
  port: 8080

application-pro.yml

server:
  port: 80

2 选择配置

有了YAML文件的配置,不同环境的不同配置终于不用改来改去了,但提交代码时还是要注意指定spring.profiles.active的值,否则还有提错配置的风险,有没有一劳永逸的办法呢?

我们在启动应用时通过环境变量的方式指定使用哪个配置,具体如下:

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

通过这样的配置,我们就可以指定,在开发环境使用dev配置,在生产环境使用pro配置,从而一次解决提错配置文件的问题,而且还很优雅!

3 注意事项

  • 两种配置方式根据个人喜好使用,但如果配置很多,建议拆成多个yml文件,即方式二。便于维护
  • 注意区分二者的不同,不能混用

4 参考资料

  • Spring实战(第五版)
  • Spring官方文档

【推荐阅读】
RabbitMQ教程
Freemarker 教程(一)-模板开发手册
下载的附件名总乱码?你该去读一下 RFC 文档了!
深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)


码字不易,欢迎点赞关注和分享。
搜索:【Java课代表】,关注公众号,每日一更,及时获取更多Java干货。
开发环境的配置提生产了!这坑怎么填?

点赞
收藏
评论区
推荐文章
DevOpSec DevOpSec
4年前
Linux主机安全配置
1.安全配置规范1.身份鉴别1.账号检查<tableborder"1"cellspacing"0"style"width:426.1pt;"<tbody<tr<tdstyle"width:113.4pt;"<pstyle"marginleft:0pt;"<strong<strong安全配置编号
Stella981 Stella981
3年前
React Hooks实现异步请求实例—useReducer、useContext和useEffect代替Redux方案
<blockquote本文是学习了2018年新鲜出炉的ReactHooks提案之后,针对<strong异步请求数据</strong写的一个案例。注意,本文假设了:<br1.你已经初步了解<codehooks</code的含义了,如果不了解还请移步<ahref"https://reactjs.org/docs/hooksintro.html
Stella981 Stella981
3年前
GitHub两天标星2.1K+!自动刷喵币靠这一个脚本就够了.....
公众号关注“杰哥的IT之旅”,选择“星标”,重磅干货,第一时间送达!!(https://oscimg.oschina.net/oscnet/f0c3939b141b4b91bc4d410bfe0e5976.jpg)大家好,我是JackTian。在正式开始之前,跟大家分享一个之前的文章:程序员自动刷淘宝充能量到爆,就靠这
Stella981 Stella981
3年前
JestClient 使用教程,教你完成大部分ElasticSearch的操作。
  本篇文章代码实现不多,主要是教你如何用JestClient去实现ElasticSearch上的操作。  授人以鱼不如授人以渔。一、说明  1、elasticsearch版本:6.2.4。    jdk版本:1.8(该升级赶紧升级吧,现在很多技术都是最低要求1.8)。    jest版本:5.3.3。  2、一些不错的文
京东云开发者 京东云开发者
7个月前
nginx+lua+redis实现灰度发布
作者:马仁喜前言:授人以鱼不如授人以渔.先学会用,在学原理,在学创造,可能一辈子用不到这种能力,但是不能不具备这种能力。这篇文章主要是沉淀使用nginxluaredis实现灰度,当我们具备了这种能力,随时可以基于这种能力和思想调整实现方案:比如ngin
Immerse Immerse
1个月前
我的 Vibe Coding 的第二个项目
大家好,我是Immerse,一名独立开发者、内容创作者、AGI实践者。关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)个人网站:https://yaolifeng.com也同步更新。转载请在文章开头注明出处和版权信息。我会在这里分享关于编程、
Immerse Immerse
3星期前
分享一个 Cursor mdc 生成器,基于 Gemini 2.5,很实用!
大家好,我是Immerse,一名独立开发者、内容创作者。关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)个人网站:https://yaolifeng.com也同步更新。转载请在文章开头注明出处和版权信息。我会在这里分享关于编程、独立开发、AI
Immerse Immerse
2星期前
做付费社群,强烈建议大家做这件事!
大家好,我是Immerse,一名独立开发者、内容创作者。关注公众号:沉浸式趣谈,获取最新文章(更多内容只在公众号更新)个人网站:https://yaolifeng.com也同步更新。转载请在文章开头注明出处和版权信息。我会在这里分享关于编程、独立开发、AI
nginx+lua+redis实现灰度发布 | 京东云技术团队
前言:授人以鱼不如授人以渔.先学会用,在学原理,在学创造,可能一辈子用不到这种能力,但是不能不具备这种能力。这篇文章主要是沉淀使用nginxluaredis实现灰度,当我们具备了这种能力,随时可以基于这种能力和思想调整实现方案:比如nginxlua
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
AI从入门到入门之手写数字识别模型java方式Dense全连接神经网络实现
前言:授人以鱼不如授人以渔.先学会用,在学原理,在学创造,可能一辈子用不到这种能力,但是不能不具备这种能力。这篇文章主要是介绍算法入门Helloword之手写图片识别模型java中如何实现以及部分解释。目前大家对于人工智能机器学习神经网络的文章都是基于py