我需要在我的 Spring Boot 应用程序中加载一些外部资源文件,如下所示...
getClass().getClassLoader().getResource("mongoKerberos.Keytab");
花了一段时间后,我意识到带有类路径的 java 命令(如下所示)不适用于 Spring Boot jar
java -cp /config-location/ -jar myApplication.jar
在网上阅读了一些文献后,我了解了几个选项,一个是使用zip布局(本质上是用来创建一个fat jar),使用spring-boot-maven-plugin中的配置(如下所示),它使用 org .springframework.boot.loader.PropertiesLauncher
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
并在命令行中指定属性文件,如下所示
java -Dloader.path=/workspace/SpringBoot/config/ -jar SpringBoot.jar
另一个选项是保留默认布局(在我的情况下为jar),但更改默认引导加载启动器类并指定属性文件位置,如下所示
java -Dloader.path=/workspace/SpringBoot/config/ -cp SpringBoot.jar org.springframework.boot.loader.PropertiesLauncher
两种解决方案都有效,但我想知道是否会有任何副作用(如启动时间增加或运行时任何其他不良行为)
或者,如果有任何其他更好的替代解决方案来包含外部资源文件,如 keytab、some-connection-truststore.jks 等