Spring boot Spring boot-不支持的配置数据位置';可选:文件:./config/*/';

Spring boot Spring boot-不支持的配置数据位置';可选:文件:./config/*/';,spring-boot,classloader,java-11,tomcat9,urlclassloader,Spring Boot,Classloader,Java 11,Tomcat9,Urlclassloader,我们正在将spring引导应用程序从2.2.4迁移到2.4.3 应用程序可以使用内置的tomcat/tomcat war部署运行。 环境:Windows Azul Java 11(Zulu 11)和Tomcat 9.0.33 如果我用我的Netbeans链接的tomcat运行代码,它就可以正常工作。 如果我将生成的war直接部署在同一个独立的tomcat中,它将抛出以下错误 SEVERE [main] org.apache.catalina.startup.HostConfig.deployWA

我们正在将spring引导应用程序从2.2.4迁移到2.4.3
应用程序可以使用内置的tomcat/tomcat war部署运行。
环境:Windows Azul Java 11(Zulu 11)和Tomcat 9.0.33

如果我用我的Netbeans链接的tomcat运行代码,它就可以正常工作。
如果我将生成的war直接部署在同一个独立的tomcat中,它将抛出以下错误

SEVERE [main] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [D:\apache-tomcat-9.0.33-without port - rest.war]
        java.lang.IllegalStateException: Error starting child
................................................................
................................................................
Caused by: org.springframework.boot.context.config.UnsupportedConfigDataLocationException: Unsupported config data location 'optional:file:./config/*/'
                at org.springframework.boot.context.config.ConfigDataLocationResolvers.resolve(ConfigDataLocationResolvers.java:110)

在阅读Spring文档时,有人提到,默认情况下,Spring引导在默认搜索位置中包含config/*/。参考:


我进一步调试了spring启动源代码和spring core源代码,发现类加载器中存在不匹配,这是导致此异常的原因

SpringFactoriesLoader是由NB-linked tomcat中的ParallelWebAppClassLoader和独立tomcat中的URLClassLoader加载的类。
参考:第129号线

第136行的缓存由ParallelWebAppClassLoader加载配置类,但不由URLlassLoader加载。因此,boot v2.4.3中的两个解析器——ConfigTreeConfigDataLocationResolver和StandardConfigDataLocationResolver,在尝试使用密钥URLlassLoader进行检索时未被识别(第136行)

不确定这是否是Springboot/SpringCore/Tomcat/升级过程中添加的任何新配置的问题。
注意:我们的application.properties只有spring.servlet.multipart相关属性。

“/”在独立的tomcat中没有得到解析

尝试使用classpath:application.properties或classpath:config/*——这需要war中的道具

或文件的绝对路径:/var/myapp/config/*。由于tomcat位于D:,您可以创建一个文件夹D:/var/myapp/config/


请注意,在spring中,您可以忽略“d:”,只需提及“/var/myapp/config/*”,因此,如果tomcat位于“x:”中,您的代码不需要更改。

正如我已经提到的,我没有添加任何配置,例如./config/*/。它是由Springboot自动添加的。我的应用程序没有任何特定的配置。