当前位置: 首页 > 知识库问答 >
问题:

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

商德泽
2023-03-14

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

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

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 Boot在默认搜索位置中包含config/*/。裁判:https://docs.spring.io/spring-boot/docs/2.4.0-SNAPSHOT/reference/htmlsingle/#boot-具有外部配置文件通配符


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

SpringFactoriesLoader是由NB-linked tomcat中的ParallelWebAppClassLoader和独立tomcat中的URLClassLoader加载的类<参考:第129行https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main/java/org/springframework/core/io/support/SpringFactoriesLoader.java#L129

第136行的缓存中的配置类由ParallelWebAppClassLoader加载,而不是URLlassLoader加载。所以这两个解析器——boot v2中的ConfigTreeConfigDataLocationResolver和StandardConfigDataLocationResolver。4.3当它试图用URLlassLoader键检索时,没有得到识别(第136行)。



注意:我们的application.properties只有spring.servlet.multipart相关属性。

共有1个答案

孔扬
2023-03-14

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

尝试使用classpath:application。属性,或classpath:config/*——这需要war中的道具。

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

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

 类似资料:
  • 在项目设置(文件- 点击下载Android NDK简短地显示一些对话框。安装了几个版本的NDK: 我的设置有什么问题? 主机:Ubuntu 18.04 LTS Android Studio 4.1.1构建#AI-201.8743.12.41.6953283,构建于2020年11月5日运行时版本: 1.8.0_242-发布-1644-b3-6222593 amd64 VM: OpenJDK 64位服

  • 本文向大家介绍THINKPHP支持YAML配置文件的设置方法,包括了THINKPHP支持YAML配置文件的设置方法的使用技巧和注意事项,需要的朋友参考一下 为什么要用 yaml 因为 Yaml 简单,而且对人类友好; Yaml: http://www.yaml.org/ 在哪里会用到? 最基本的,在 ThinkPHP 的配置文件里面就可以选择 Yaml 的格式,你是愿意写 Yaml 的简洁格式配置

  • 是否支持不同的测试配置文件?在我的本地测试期间,我想使用“mvn包”,它使用“测试”配置文件。这指向我的本地主机数据库。对于我的 DevOps 工具链,我想使用不同的测试配置文件,因为我们使用的是容器,不能使用本地主机。目标是区分本地计算机测试和云环境。测试。

  • 问题内容: 我有一个脚本,打算像这样使用: 是一个位置参数,其定义如下: 我希望它是可选的:未指定时,它应该只是。 不幸的是,当我不指定参数时,我得到了。 问题答案: 使用(或如果您需要多个目录) 扩展示例:

  • WebProfile-7.0 LocalConnector-1.0

  • 问题内容: 监视远程应用程序(使用jstatd)时,我既无法配置文件也无法监视CPU消耗。堆监视(假设我不使用G1)起作用。jvisualvm提供消息“此JVM不支持”。在CPU图形窗口中。 我的设置中缺少任何内容吗?Google显示的结果很少。 本地环境(Mac OS X 10.6): 远程环境(Linux版本2.6.16.27-0.9-smp(gcc版本4.1.0(SUSE Linux))):