一、springboot maven打ja包
1、配置文件不外放
a、maven配置打包插件
<!--打包配置,执行mvn clean package-->
<packaging>jar</packaging>
<!--maven打war包依赖配置-->
<!--<packaging>war</packaging>-->
<!--maven-plugin的依赖配置-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
b、maven打jar包
2、配置文件外放
Springboot读取核心配置文件(application.properties)的优先级为
Jar包同级目录的config目录
Jar包同级目录
classPath(即resources目录)的config目录
classpath目录(代码中的yml)
上面是springboot默认去拿自己的核心配置文件的优先级,还有一种最高优先级的方式是项目启动时通过命令的方式指定项目加载核心配置文件,命令如下
java –jar -Dspring.config.location=xxx/xxx/xxxx.properties xxxx.jar
如果Spring Boot在优先级更高的位置找到了配置,那么它会无视优先级更低的配置
1.2 其他资源配置文件
上面描述的Springboot核心文件已经能够提取出jar包外进行管理了,但是还有其他一些业务上的配置文件,如数据源配置文件,公共资源定义配置文件(常量,FTP信息等),quartz定时器,日志等配置文件我们如何去提取出来并确保能在代码中引用到呢
我们知道Springboot项目可以通过注解方式来获取相关配置文件,所以我们也是通过注解方式让项目能够引用到jar包外部的配置文件的,如下图:
@PropertySource里面的value有两个值,第一个是classpath下config目录下的数据源配置文件,第二个则是根据spring.profiles.path动态获取的目录,spring.profiles.path是我们在核心文件自定义的一个配置项,它的值是我们配置文件统一管理的文件夹路径,后面的ignoreResourceNotFound=true则是设定假如根据前面一个路径没有找到相关配置文件,则根据第二个路径去找。
我们还可以直接根据路径,用FileSystemResource类去加载一个配置文件实例出来,如下图
原理类似,根据在核心文件自定义的统一配置目录的路径来加载配置文件
另外logback日志配置文件加载方式如下:
综上所述,我们梳理一下实现方案的思路
1、 在springboot核心文件里定义一个spring.profiles.path配置项,它的值指向我们所有配置文件统一放置的目录,包含核心文件自身也是放置在里面的
2、 代码或者配置文件里加载配置文件的地方也应该获取spring.profiles.path配置项来动态加载该路径下的配置文件
3、 Pom.xml文件修改打包相关模块,将配置文件排除,这样我们打出的jar包是不含配置文件的,打包配置请参考文档节点3
4、 启动jar包时,通过命令指定加载的核心文件为spring.profiles.path下的核心文件
二、springboot maven打war包
a、启动类修改部分为红色
b、maven添加插件
<packaging>war</packaging>
<!--maven打war包依赖配置-->
<build>
<finalName>uqiansoft</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
c、删除springboot自带tomcat