Spring JarLauncher不会从依赖项加载application.yml

时间:2017-09-19 12:46:57

标签: spring spring-boot executable-jar spring-config

我的问题类似于此处描述的问题(我没有明确地覆盖类路径): Spring application.yml not detected when running with -classpath

我有一个SpringBoot应用程序生成可重复打包目标构建的可执行文件 app.jar 。 我在 backend.jar 的根上下文中有 application.yml ,它是 app.jar 的依赖项。 我可以通过MainClass从IDEA成功运行应用程序:

SpringApplication.run(MyApp.class, args);

我可以从终端成功运行该应用程序:

java -jar app.jar

但是,当我在本地运行它时,应用程序无法从application.yml配置 CloudFoundry

unzip app.jar
java org.springframework.boot.loader.JarLauncher

Spring将启动并提供静态内容,但在首次尝试访问需要配置数据的任何内容时失败。

我已阅读文档,但我无法弄清楚类路径有什么问题。从MANIFEST.INF我假设 java -jar app.jar 执行与上面第三个例子中相同的类。

感谢您的想法。

1 个答案:

答案 0 :(得分:0)

结果是类路径问题(呃!)。

我们在依赖关系Y中有一个'遗忘'空application.yml,在我们的依赖关系X中有一个实际有效的application.yml。与类类似,类路径中只有第一次出现的资源由类加载器加载。

启用spring调试日志记录并检查 ClasspathLoggingApplicationListener 输出后,可以看到fatjar中依赖项的类路径顺序对于所讨论的用例不同

对于 java -jar 嵌套的JAR顺序似乎是哈希。对于 JarLauncher ,它是按字母顺序

使这一点保持一致的现有请求:https://github.com/spring-projects/spring-boot/issues/9128