我们在一个产品的生命周期内,会接触多个环节:开发环境、测试环境、生产环境,这些环境会对应不同的DataSource、Redis集群、Zookeeper等配置。
- Maven的Profile机制
Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。
<project>
<profiles>
<profile>
<build>
<defaultGoal>...</defaultGoal>
<finalName>...</finalName>
<resources>...</resources>
<testResources>...</testResources>
<plugins>...</plugins>
</build>
<reporting>...</reporting>
<modules>...</modules>
<dependencies>...</dependencies>
<dependencyManagement>...</dependencyManagement>
<distributionManagement>...</distributionManagement>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<properties>...</properties>
</profile>
</profiles>
</project>
一个Profile可以覆盖项目构件的最终名称,项目依赖,插件配置以影响构建行为,Profile还可以覆盖分发配置。maven提供了一种针对不同环境参数“激活”一个profile的方式,这就叫做profile激活。
使用-P参数显示的激活一个profile
我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为profileTest1的profile,我们就可以这样做:
mvn package –P profileTest1
- Spring Boot的支持
SpringBoot使用一个全局的配置文件application.properties
或application.yml
,配置文件路径:src/main/resource目录下或类路径下的/config下。
Spring boot支持配置多个环境的配置文件,其配置文件名字格式application-{profile}.yml
Spring可以在application.properties
指定激活的profile,配置如下:
#properties格式
spring.profiles.active=dev
也可以在启动应用的时候添加启动参数--spring.profiles.active=dev
。
(⚠️Spring Boot的Profile机制和Maven的其实是没关系的,文末给出了一篇博客,讲解了如何将Maven的Profile机制与Spring Boot的active profile机制同步,未验证)
-
微服务环境下的配置文件
前面介绍的两种方式,配置文件都显式的暴露在项目中,这对于实际运营的项目,是有比较多的问题的:- 对于在线运营的项目有安全隐患,数据库等信息都会暴露出来,给产品的安全带来很大的隐患
- 对于微服务场景,不利于维护
(1)配置分散在不同的项目中,不利于统一管理
(2)配置和代码处于同一个版本体系下,不利于版本管理
(3)多个系统共同使用的配置更改时,需要一处处去修改,非常麻烦,容易出错
(4)对于动态配置的文件,也不利于OPS维护
因此,业界普遍采用了Config Server的方式,Spring Cloud提供了Spring Cloud Config的组件,帮助我们管理微服务的配置。
Consu可以l作为配置服务,并采用git存储。另外Spring Cloud Config也支持git版本管理,Consul在可用性的支持上更胜一筹;对于动态配置,Consul也会方便一些不需要借助Spring Cloud Bus这样的中间件。(Spring Cloud Bus将Spring的事件处理机制和消息中间件消息的发送和接收整合起来,可以轻松的将分布式应用中连接有消息中间件的多个服务节点连接起来,实现消息互通。)
参考文献:
https://www.cnblogs.com/wxgblogs/p/6696229.html(Maven Profiles详解)
https://www.jianshu.com/p/8c48f4fd69da(Profile之Maven、Spring Boot、Spring Cloud Config)
https://www.cnblogs.com/softidea/p/6375806.html(从Maven的Profile环境获取Spring Boot的active profile)
https://yq.aliyun.com/articles/468274(阿里巴巴微服务配置中心介绍)
https://www.jianshu.com/p/b1463c1df5a2(Consul作为微服务配置中心)