很多人都说,Spring Boot最大的作用就是简化配置,摆脱原来Spring的配置地狱。确实,相比Spring原来的配置,Spring Boot简直就是天堂,所以说Spring Boot就是一个又大又深的坑,跳进去了就再也出不来(你也不愿意出来),这也是这个系列文章为什么叫入坑指南的原因。 不过,任何应用都不可能摆脱配置,像数据库相关配置、业务自定义配置等就肯定需要进行配置的。所以,在本文主要讲一下Spring Boot的一些配置方式,主要参考官方文档和自己项目中的一些使用方式。
Spring Boot默认的配置文件时application.yml(或application.properties),相对于properties文件,yaml格式层级结构清晰易于阅读和管理,故推荐使用yaml格式进行配置。需注意的是,当相同目录下同时存在application.properties和application.yml文件时,会优先读取properties文件中的配置。
application.properties/application.yml配置文件读取优先级顺序如下: 文件|优先级
(值越小优先级越高)|说明 --|--|-- file:./config/application.properties|1|Jar包所处的同级目录的下级config目录 file:./config/application.yml|2|Jar包所处的同级目录的下级config目录 file:./application.properties|3|Jar包所处的同级目录 file:./application.yml|4|Jar包所处的同级目录 classpath:./config/application.properties|5|ClassLoader根目录下级config目录 classpath:./config/application.yml|6|ClassLoader根目录下级config目录 classpath:./application.properties|7|ClassLoader根目录 classpath:./application.yml|8|ClassLoader根目录
上表只是在默认情况下,实际上你可以通过spring.config.location
配置修改配置文件读取路径,该配置既可以直接指定读取的配置文件,也可以指定配置文件的目录,如果需要指定目录,配置值必须是斜杠“/”结尾。 比如将配置设置为spring.config.location=classpath:./custom_location/,file:./custom_location
,那么读取的优先级顺序会变成:file:./custom_location
、classpath:./custom_location
。
需注意的是,spring.config.location
配置需在环境变量或者命令行参数中进行配置。
Spring Boot还可以通过环境变量或者命令行参数进行应用配置,这两种配置方式优先级高于配置文件,即: 命令行参数>>环境变量>>application.properties>>application.yml 这两种配置方式在实际应用中有很大的用处,特别是用于多环境配置文件切换,下文会进行介绍。
软件开发过程中,会涉及到开发、测试、灰度、生产等各部署环境,每个环境所需要的配置肯定会有差异,不同环境的配置文件怎么管理?CI/CD过程如何切换? Spring Boot框架提供了多环境配置文件管理的解决方式,上文说到,Spring Boot默认的配置文件是application.yml,你可以按application-{profiles}.yml
创建多个配置文件如:
spring.profiles.active
配置参数指定启用的profiles即可。上面说的是如何管理多环境配置,配置文件配置好了,如何在持续集成的流程中进行配置文件的动态切换呢?我接触的项目中,注意是以下几种方式,给大家介绍一下。
spring.profiles.active
配置给改了,或者保证测试、或生产代码分支下该配置不变。优点
缺点
注意:使用maven变量时,项目的父项目需要是“spring-boot-starter-parent”,否则需要额外增加配置,可参考:https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/#howto-automatic-expansion
<!-- 不同环境查找不同配置文件 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<maven.test.skip>true</maven.test.skip>
</properties>
<activation>
<!-- 默认环境变量 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>
(2).修改application.yml中的spring.profiles.active
配置,使用maven变量替换。
spring:
profiles:
active: @profiles.active@
(3)..maven构建时通过参数指定替换变量,如下:
mvn clean package -Pprod
优点
缺点
优点
缺点
# 启用test profiles
java -jar target/spring-boot-examples-properties-1.0-SNAPSHOT.jar --spring.profiles.active=test
优点
码云:https://gitee.com/centy/spring-boot-examples/tree/master/spring-boot-examples-properties
通过Spring Boot可以快速构建一个微服务,那么微服务的服务治理就不得不提Spring Cloud全家桶,Spring Cloud提供各种配置中心解决方案(Spring Cloud Config、Consul、Zookeeper等)。 通过配置中心管理各个微服务的配置,开发、测试环境与生产的配置中心分离,就可以无需关注单个服务的不同环境配置的切换了,是不是很爽? 但是还有一个问题,每个微服务需要指定配置中心的地址,这个地址还是需要切换不是吗?有没有方法可以不切换这个配置呢?实际不用考虑的那么复杂,有很简单的方式,如果你是通过Docker容器部署应用的,通过设置容器环境变量指定配置中心的访问地址就可以了。
Original url: Access
Created at: 2019-01-30 18:52:01
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论