SpringBoot加载外部配置文件
背景
最近被抓壮丁处理Spring上的问题, 由于业务需要,需要单独设置一个配置文件 [ common.properties ] ,根据配置文件里面的内容进行加载配置项,处理数据. 但是遇到一个问题, 代码里面加载的时候,只能加载jar里面的common.properties配置文件, 外面config目录里面的common.properties配置文件不生效,只能加载jar里面的配置文件, 如果把jar里面的配置文件删掉的话,会报错.....
原因
伪代码:
Properties properties = new Properties();
// 读取common.properties文件
InputStream fis = PropertyUtils.class.getResourceAsStream("common.properties");
// 加载common.properties文件
properties.load(fis);
// 读取属性
// properties.getProperty("key");
加载配置文件的时候采用的getResourceAsStream进行加载的.
SpringBoot是通过
org.springframework.boot.loader.Launcher
类来启动的.是jar包中META-INF/MANIFEST.MF
文件中Main-Class
这个属性的值,Launcher最后会调用我们自定义启动类中的的main()
方法.这个类有三个子类,分别是
JarLauncher
,WarLauncher
,PropertiesLauncher
, 前两个Launcher都是不能添加外部依赖的。只有
PropertiesLauncher
是可以添加外部依赖的。
解决
1. 排除common.properties 配置文件的 pom.xml配置
[非必选,只是觉得为了不必要的麻烦,就直接排除掉了,直接使用外部的配置.]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<excludes>
<exclude>common.properties</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
2. 修改 发布项目的pom.xml
主要是增加属性layout属性, 实例如下, 其他mainClass之类的属性,自己按照项目实际情况来决定.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.3.RELEASE</version>
<configuration>
<mainClass>com.zby.XXXXXXApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
3.直接打包
打包命令: mvn -U clean -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
启动命令:
4. 启动程序&验证
实例:
目录结构如下:
./ // 根目录
|- run.jar // 程序jar
|- logs // 日志目录
|- config // 配置文件目录
|- application.yml // SpringBoot默认配置文件
|- common.properties // 自定义的配置文件.
启动命令: java -Dloader.path=./config -jar run.jar
上一篇: 数据库在信息系统中的地位
下一篇: hive打开调试信息方法