maven springboot 除去指定的jar包_企业级SpringBoot应用多个子项目配置文件规划、多环境支持(二)...

d7480742f1b760dd7ce00b9aaef37593.gif

前言

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

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

遗留问题一

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

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

9da3978c110263b069782425f06e0b7d.png修改父POM

bba22f92ce49f56d997387c88f1bcc84.png

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

激活 profile 配置

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

mvn clean install -Pdev

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

true

那我们yml的配置文件中,如何引用到pom里面配置profile的参数呢?那就是利用@@标记。我们可以在rb-common-config子项目的配置文件中引用pom文件中profile参数值,如下

5c96bb6515cf6d891d2e3279aab4bb9d.png

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

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

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

32e6adce99087db990a1bbf40de66f78.png获取配置参数流程

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

5cde25811e4187c2e133156320c6b00b.png

遗留问题二

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

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

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

java -jar xxx.jar

这种方式简化了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包

f3878f3e7daf2747cceb4c9544ce843c.png

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

2610ddf210b1751e20bc7e76d4ebdcef.png

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

46be8fd27fcad446bc795b977f814655.png

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

maven-resources-plugin复制配置文件

8e5504e7cece8c3791182d21424fa9ac.png

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

a19b60ce0cababd8bdfbe7c9094fd2cc.png

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

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

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

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

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

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

总结

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

还有在企业级应用中,还要结合持续化集成方案,自动打包、部署。这些就不是这篇文章介绍的内容了,老顾下次再介绍。

3738d52b91927face35036b16eb56bc2.png

8471c34f8454af5e44d4527e2956c9c1.gif

· 企业级SpringBoot应用多个子项目配置文件规划、多环境支持(一) · 当妹子问你心里有没有B-Tree的时候,把这篇漫画甩给她 ·  金三银四专题丨吊打面试官系列【4】

点击在看,驱动原创472c3810acc6ffe4528a2c6dfdce765c.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值