Springboot初始化取决于Liberty application.xml并显示类路径未知异常

时间:2018-07-25 07:37:04

标签: spring-boot websphere-liberty

我试图在WebSphere Liberty Core 18.0.0.2中部署我的springboot应用程序。我在服务器中有两个xml文件-server.xmlapplication.xmlapplication.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.xml重命名为springbootapp.xml,并且可以正常工作。应用运行正常。

请告诉我是否需要进行任何配置更改以将springboot限制为不查找容器特定的配置?

2 个答案:

答案 0 :(得分:2)

如Spring Boot参考指南(Externalized Configuration)中所述,它将查找名为application.properties的文件。但是,他们没有告诉您的是,除了application.properties之外,它还可能是application.xml

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

因此,简而言之,配置加载将检测到application.propertiesapplication.yml以及 application.xml

要解决此问题,您可以做两件事

  1. 重命名文件(与您一样)
  2. 将其移出类路径的根目录,然后放置在例如META-INF中。

答案 1 :(得分:1)

尽管从技术上讲不是一个答案,但是请注意,您可以通过在{的server.contextPath内声明Spring Boot应用程序属性server.servlet.contextPath<applicationArgument>来更改Spring Boot应用程序的根上下文路径。 {1}}。假设使用Spring Boot 2.0应用程序,请尝试此操作。

<springBootApplication>

参考:https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_dep_sb_apparguments.html