概述
现在主流的架构项目都是采用springboot, 越来越多的大中型项目架构采用微服务方式, 最近几天在使用目前比较前沿的技术搭建新的微服务架构, 借此机会整理了一下相关配置文件的一些内容, 一方面是为了做一个备份记录, 另一方便也是希望能帮助到同行的码友们!
以下描述中均是以各种均存在的情况进行描述
对于springboot多环境项目来说各种项目构建工具或框架的基本思路是一致的, 使用profile实现配置多分不同环境的配置文件, 再通过打包或启动命令指定需要的内容
如果没有指定任何profile的配置文件的话,spring boot默认会启动application.properties。
一、多环境配置
1、profile的使用
springboot利用profile在不同的环境下使用不同的配置文或配置项。比如数据库配置、第三方秘钥等。
通常会在项目中pom.xml中进行以下配置
<profiles>
<profile>
<id>dev</id>
<properties>
<activeProfile>dev</activeProfile>
<baseActiveProfile>basedev</baseActiveProfile>
</properties>
<activation>
<activeByDefault>true</activeByDefault><!-- 默认启动配置项 -->
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<activeProfile>test</activeProfile>
<baseActiveProfile>basetest</baseActiveProfile>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<activeProfile>prod</activeProfile>
<baseActiveProfile>baseprod</baseActiveProfile>
</properties>
</profile>
</profiles>
上述配置默认dev, 并写有基础base参数配置,用以公共配置参数,配置完成后idea工具中会出现相应的启动选项
服务resources下application.yml文件中如下配置
server:
port: 7100
spring:
application:
name: demo-product
profiles:
active:
- @activeProfile@
include:
-
base
-
@baseActiveProfile@
spring boot允许通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件;并通过在application.properyies文件中使用spring.profiles.active配置项来指定具体激活一个或者多个配置文件。
延伸问题: 上述配置中active与include有哪些区别呢? 比较简易的理解就是include 包含的profile会无条件的active,是用于基础公共配置文件使用 而active 包含的profile 有可能会被优先级高的定义覆盖
2、配置文件命名
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应 你的环境标识,比如:
application-dev.properties 或 application-dev.yml:开发环境
application-basedev.properties 或 application-basedev.yml:开发环境
application-test.properties 或 application-test.yml:测试环境
application-basetest.properties 或 application-basetest.yml:测试环境
application-prod.properties 或 application-prod.yml:生产环境
application-baseprod.properties 或 application-baseprod.yml:生产环境
application.properties 或 application.yml:服务配置文件
application-base.properties 或 application-base.yml:公共配置文件
3、配置文件的位置及加载顺序(项目中)
/** 还有其他启动时挂载或第三方比如nacos 集中化配置等 **/
profile的配置文件和application.properyies的放置位置一样,放于以下四个位置
a)、当前目录的 “/config”的子目录下
b)、当前目录下
c)、classpath根目录的“/config”包下
d)、classpath的根目录下
微服务公共conf配置模块配置文件优先级, 以dev为例, 从高到低
a)、 业务服务自己resources下config文件中application-dev.yml
b)、 业务服务自己resources下application-dev.yml
c)、 公共配置服务conf模块resources下config文件中application-basedev.yml
d)、 公共配置服务conf模块resources下application-basedev.yml
e)、 公共配置服务conf模块resources下config文件中application-base.yml
f)、
公共配置服务conf模块resources下application-base.yml
g)、 业务服务自己resources下config文件中application.yml
h)、 业务服务自己resources下application.yml
二、配置文件激活方式
2.1、在properties 文件中设置active
程序在启动过程中会默认加载application.properties中的配置,我们只需要在application.properties文件中使用spring.profiles.active属性来设置即可。属性的值对应上面提到的{profile},如上面的文件对应的值分别为:dev、test和prod。
2.2、在properties 文件中设置include
spring.profiles.include 用于设置工程的公共配置,也就是include 包含的profile会无条件的active。
2.3、在命令行中添加相关选项
在命令行中使用–spring.profiles.active=dev设置激活具体的配置文件。
2.4、修改虚拟机的配置
在启动命令行中添加-Dspring.profiles.active=dev配置。
3.5、自定义配置文件路径
a)、spring.config.location
–spring.config.location=“D:/xxx/system.properties”
要特别注意的是,该命令指定的配置文件会使项目默认的application.properties或application.yml文件失效,换句话说该命令会用指定的配置文件替换application.properties或application.yml文件。
总结:该命令指定的配置文件,会使默认互补覆盖配置失效,一般不推荐使用!
b)、–spring.config.additional-location
–spring.config.additional-location=“D:/xxx/conf/”
顾名思义,该命令用于追加配置文件。原有的application.properties或application.yml文件均有效。
注意,使用双引号可以支持带空格的路径,路径是斜杠,而不是Windows默认的反斜杠。
注意:经过测试,如下:–spring.config.additional-location后面接的必须是一个目录,不是一个文件,你直接接配置文件,发现配置文件不生效。
--spring.profiles.active=dev --spring.config.additional-location=/home/xxx/conf/
>nohup.output
2>&1 &
三、其他内容
3.1、屏蔽命令行中的设置
通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?所以Spring Boot也提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。
最后
以上就是爱笑发卡为你收集整理的springboot 微服务 配置文件相关的全部内容,希望文章能够帮你解决springboot 微服务 配置文件相关所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复