Springboot奇怪的资源加载行为

时间:2017-02-27 16:15:59

标签: spring-boot classpath

我正在使用springboot 1.5.1应用程序,我正在尝试加载wsdl目录中资源目录中包含的WSDL。根据我的应用程序执行的位置,我得到不同的结果(命令行,intellij,云代工),我似乎无法让所有三个同时工作。

我尝试了几种查找资源的方法:

从迁移到springboot之前,我们有了这个(在IntelliJ中工作但不是java -jar myboot.jar):

this.getClass().getResource("/wsdl/my.wsdl");

我将它切换到通常更正确的版本并让它在IntelliJ和java -jar中工作但不是Cloud Foundry:

this.getClass().getClassLoader().getResource("/wsdl/my.wsdl");

我将它切换为使用Spring Resource Loader版本,它在IntelliJ和CloudFoundry中工作,但不在java -jar中工作:

@Value("classpath:/wsdl/my.wsdl")
private Resource wsdlResource;

wsdlResource.getURL();

在命令行上,我注意到它似乎认为BOOT-INF / classes是一个JAR文件(请注意!类之后):

  

引起:javax.xml.ws.WebServiceException:无法访问WSDL:jar:file:/ C:/dev/redacted/build/libs/redacted.jar!/ BOOT-INF / classes!/ wsdl /my.wsdl。它失败了:           在C:\ dev \ redacted \ build \ libs \ redacted.jar中找不到JAR条目BOOT-INF / classes!/wsdl/my.wsdl。

从查看IntelliJ的URL,它指的是实际的源文件夹,它解释了为什么它似乎始终有效。

导致这种情况的原因是什么以及如何通过springboot成功地普遍加载这些类路径资源?

0 个答案:

没有答案