首页 > 解决方案 > Springboot 初始化依赖于 Liberty application.xml 并显示类路径未知异常

问题描述

我试图在 WebSphere Liberty Core 18.0.0.2 中部署我的 springboot 应用程序。我在服务器中有两个 xml 文件 -server.xmlapplication.xml. application.xml包含如下应用程序特定配置。

<library description="Oracle JDBC Library" id="OracleJDBCLib" name="OracleJDBCLib">
    <fileset dir="${shared.resource.dir}/jdbc/oracle" includes="*.jar"/>
</library>
<jdbcDriver id="OracleProvider" libraryRef="OracleJDBCLib"/>

 <springBootApplication contextRoot="/provider" id="provider" location="provider-exec.war" type="war">
     <classloader commonLibraryRef="OracleJDBCLib"  />
</springBootApplication>

它被包含在 server.xml 中

<include location="${server.output.dir}/application.xml" optional="true" onConflict="MERGE"/>

问题是springboot正在将它application.xml用于不应该发生的bean初始化。根据我的理解,springboot 战争是自包含的,它不会寻找容器特定的配置。

为了验证,我已将其重命名application.xmlspringbootapp.xml并且它有效。应用程序运行良好。

请让我知道是否需要进行任何配置更改以限制 springboot 不查找容器特定配置?

标签: spring-bootwebsphere-liberty

解决方案


如 Spring Boot 参考指南(外部化配置)中所述,它将查找名为application.properties. 然而,他们没有告诉你的是,application.properties这也可能是一个application.xml.

可以java.util.Properties从文件.properties.xml文件加载对象。Spring(以及因此 Spring Boot)对此具有隐式支持。

所以总之配置加载会检测application.propertiesapplication.yml而且application.xml

要修复你可以做两件事

  1. 重命名文件(就像你做的那样)
  2. 例如,将其移出类路径的根目录并将其放入META-INF

推荐阅读