企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

目录

  1. 前言
  2. 遗留问题一
  3. 修改父POM
  4. 激活Profile配置
  5. 获取配置参数流程
  6. 遗留问题二
  7. 分离lib和resources
  8. 总结

前言

上一篇我们介绍了在分布式项目中,如何新建单独的配置子项目,来解决整个系统的配置问题,也顺便介绍了一般多环境的处理方案

但我们遗留了2个问题,那今天老顾介绍一下怎么解决遗留的问题。

遗留问题一

如何不要新建多个配置文件,如:application-dev.yml,application-prod.yml;这样的方案很多的子项目都要新建这些文件,太麻烦了。我们来介绍一下下面的方案。

我们利用maven的Profiles来帮我们区分一下环境;我们分布式项目中正好都会有一个parent pom父项目,起到统一依赖版本,以及公共的依赖包的作用,如下图

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

修改父POM

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

上面有两段profile,分别代表开发环境和生产环境,核心以id为准,properties标签里面包含不同环境的参数值。

激活 profile 配置

用户可以在 mvn 命令行中添加参数“-P”,指定要激活的 profile 的 id。如果一次要激活多个 profile,可以用逗号分开一起激活。例如:

<code>mvn clean install -Pdev/<code>

如果希望某个 profile 默认一直处于激活状态,可以在 profile 中配置 activation 元素,指定某个 profile 为默认激活状态,样例配置代码如下:

<code>
	true
/<code>

那我们yml的配置文件中,如何引用到pom里面配置profile的参数呢?那就是利用@@标记。

我们可以在rb-common-config子项目的配置文件中引用pom文件中profile参数值,如下

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

在maven进行构建时,会把@XXX@替换为相应的参数值。这样就起到了通过maven构建达到区分不同的环境。

这种方案最大的好处就是,我们只需要建一个配置文件,不需要为每个环境新建一个配置文件了,看上去还比较清晰。

其他引用项目rb-user-server如何引用rb-common-config配置的参数呢?其实比较简单就是${}方式,如图

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

获取配置参数流程

我们总结一下上面的整个获取参数的流程

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

遗留问题二

还有一个问题就是安全性问题,我们不可能把生产环境的一些重要的参数暴露给开发人员,生产环境一般都是运维进行管理的,那如何配置生产环境呢?

一般我们配置的方式就是外部化配置,什么意思呢?继续往下看。

采用springboot项目,默认是把配置文件和lib依赖都打到了一个jar中,我们在运行的时候直接采用

<code>java -jar xxx.jar/<code>

这种方式简化了jar包的启动,但是也有不好的地方。

第一:jar包比较大,这是因为这个jar包含了第三方依赖的jar包,所以很大,给运维带来一些麻烦,这个还不是太重要。

上面的问题还不是太重要,下面的问题就比较致命了

第二:配置文件也打进了jar包中,不方便我们进行查看配置,而且不能够修改配置,这个也太难受了,要修改配置,需要重新打包。

那怎么处理呢?

分离lib和resources

就是利用maven插件把springboot的jar里面的lib和resources文件分离出来,里面涉及到

maven-jar-plugin

spring-boot-maven-plugin

maven-dependency-plugin

maven-resources-plugin

各自插件的使用,这里就不介绍了,直接上配置

spring-boot-maven-plugin 排除启动jar包中依赖的jar包

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

maven-jar-plugin 自定义maven jar打包内容

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

maven-dependency-plugin 复制项目的依赖包到指定目录

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

分离lib中,需要把config子项目中的配置文件解压里面,也一起放到当前项目的config中

maven-resources-plugin复制配置文件

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

通过上面的配置,我们就分离出了lib和resources文件,用maven构建

企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)

这样我们达到了把config配置文件分离了出来。

我们把配置文件分离出来了就好办了,在生产环境的时候,真实的配置文件在运维手上,运维会替换掉maven构建出来的config配置文件。

这样就很好的保护了生产环境的参数值。

备注:如果配置文件包含其他的,就需要在启动的时候 加上--spring.config.location;通过此属性指定配置

# 外部配置文件绝对目录,如果是目录需要/结尾,也可以直接指定文件

# 如果指定的是目录,spring则会读取目录中的所有配置文件

总结

介绍到这里我们已经做到了配置文件外部化了,大型项目在配置规划时,会引入配置中心这个概念(这个之前老顾已经介绍过了),不需要引入子项目config,直接连接配置中心即可。

还有在企业级应用中,还要结合持续化集成方案,自动打包、部署。

这些就不是这篇文章介绍的内容了,老顾下次在介绍。

---End---

最近老顾上传了微服务网关的分享课程,请大家多多支持

推荐阅读

a、dubbo如何处理业务异常,这个一定要知道哦!

b、企业级SpringBoot应用多个子项目配置文件规划、多环境支持(一)

1基于RocketMq的SpringCloud Stream框架实战入门

2、如何搭建消息中间件应用框架之SpringCloud Stream

3面试必备:网关异常了怎么办?如何做全局异常处理?

4Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则

5Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍

6API网关在微服务架构中的应用,这一篇就够了

7学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)

8Lambda用在哪里?几种场景?

9、为什么会出现Lambda表达式,你知道吗?

10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用

11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构

12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足

13、阿里P7二面:聊聊零拷贝的原理

14、秒杀系统的核心点都在这里,快来取

15、你了解如何利用token方式实现分布式Session吗?

16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂

17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调

18、企业实战Redis全方面思考,你思考了吗?

19、面试题:Thread的start和run的区别

20、面试题:什么是CAS?CAS的作用以及缺点

21、如何访问redis中的海量数据?避免事故产生

22、如何解决Redis热点问题?以及如何发现热点?

23、如何设计API接口,实现统一格式返回?

24、你真的知道在生产环境下如何部署tomcat吗?

25、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

26、分享大厂分布式唯一ID设计方案,快来围观

27、你想了解一线大厂的分布式唯一ID生成方案吗?

28、你知道如何处理大数据量吗?(数据拆分篇)

29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

31、你了解大型网站的页面静态化吗?

32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

33、你知道怎么解决DB读写分离,导致数据不一致问题吗?

34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

35、你真的知道怎么使用缓存吗?

36、如何利用锁,防止缓存击穿?重构思想的重要性

37、海量订单产生的业务高峰期,如何避免消息的重复消费?

38、你知道如何保障生产端100%消息投递成功吗?

39、微服务下的分布式session该如何管理?

40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招

41、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里

42、阿里二面:CDN缓存控制原理,看看能不能难住你

43、SpringCloud Alibaba之Nacos多环境多项目管理

44、SpringCloud Alibaba系列之Nacos配置中心玩法

45、SpringCloud Alibaba之Nacos注册中心

46、SpringCloud Plus版本之SpringCloud Alibaba

47、SpringCloud Alibaba之Nacos集群、持久化

48、SpringCloud Alibaba之Nacos共享配置、灰度配置

49、SpringCloud Alibaba之Sentinel工作原理

50、SpringCloud Alibaba之Sentinel流控管理

51、SpringCloud Alibaba之Sentinel降级管理

52、SpringCloud Alibaba之Sentinel热点参数限流

53、SpringCloud Alibaba之Sentinel的API实战


分享到:


相關文章: