多模块开发的项目中,通常会把公共的部分提取出来,例如A、B模块引用了C模块,C模块中有一些配制信息。那A、B模块在启动时是否会加载C的配置信息呢?什么时机触发的配制文件的加载呢?实际验证了一下,先说配制文件加载的时机,是在springboot 的启动类Application调用run方法时触发的;那A模块在pom中引用了C模块 ,但并不会让C模块自动运行其启动类,因此C的配置文件是不会被加载进来的。在A模块启动时也会报错,因此,大家为了解决这个不动脑的方法就是直接在A中加上相应的配置。B中也需要加上C中相应在的配置。这样写很麻烦。如下详细说明
模块引用示例
如上图所示collect和interface两个模块都会用到cache模块中的jetcache 。collect 和interface要怎么做呢?
A、B模块Pom中加入C的引用
<dependency>
<groupId>com.test.management</groupId>
<artifactId>cache</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
A、B模块启动类中加入对C包下引用类的扫描
因为springboot 在加载类时,会扫描和启动类同级目录下所有的包,如果需要通过注解引用C模块下的类,需要在启动类中增加 扫描包路径如下图所示:
引用模块A和B的配置文件说明
A和B想引用C模块的配置,需要在配置文件中增加引用说明,如下所示:
spring:
profiles:
include: cache #cache为C模块配置文件的后缀
被引用模块C模块的配制文件说明
被引用模块C的配置文件唯一说明的是需要和引用模块:A模块、B模块的配制文件名前缀一样。eg,A模块的配置文件为application.yml,那个被引用模块配置文件为application-c.yml。只要保证都是application开头即可,-c与上一步中A模块配置文件中引用的名称一致。如下所示:
启动脚本指定多个配置文件
布到生产环境上去,需要指定外部配置文件,便 于修改。如果指定多个呢。下面这样即可
APP=interface.jar
# 关闭应用
kill -9 $(ps -ef | grep $APP | grep -v grep | awk '{ print $2 }')
nohup java -jar $APP --spring.config.location=file:application.yml,file:application-cache.yml >info.log>&1&
tail -f info.log