Инициализация Springboot зависит от Liberty application.xml и показывает неизвестное исключение classpath

Я пытался развернуть мое приложение Springboot в WebSphere Liberty Core 18.0.0.2. У меня есть два XML-файла на сервере - server.xml а также application.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 для инициализации боба, которая не должна происходить. Насколько я понимаю, Springboot War самодостаточна и не будет искать конкретную конфигурацию контейнера.

Для проверки я переименовал application.xml в springbootapp.xml и это сработало. Приложение работало нормально.

Пожалуйста, дайте мне знать, требуется ли какое-либо изменение конфигурации, чтобы ограничить загрузку, чтобы не искать конкретную конфигурацию контейнера?

2 ответа

Решение

Хотя технически это не является ответом, обратите внимание, что вы можете изменить корневой путь контекста вашего приложения Spring Boot, объявив свойства приложения Spring Boot server.contextPath или же server.servlet.contextPath в пределах <applicationArgument> вашей <springBootApplication>, Предполагая приложение Spring Boot 2.0, попробуйте это.

<variable name="springBoot15AppArg1" value="--server.contextPath=/provider"/>
<variable name="springBoot20AppArg1" value="--server.servlet.contextPath=/provider"/>

<springBootApplication location="provider-exec.war">
    <applicationArgument>${springBoot20AppArg1}</applicationArgument>
</springBootApplication>

Ссылка: https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_dep_sb_apparguments.html

Как объясняется в справочном руководстве по загрузке Spring ( Externalized Configuration), он будет искать файл с именем application.properties, Однако, что они не говорят вам, что вместо application.properties это также может быть application.xml,

java.util.Properties объект может быть загружен из .properties или же .xml файл. Spring (и, следовательно, Spring Boot) имеет неявную поддержку для этого.

Короче говоря, загрузка конфигурации будет определять application.properties, application.yml но также application.xml,

Чтобы исправить вы можете сделать 2 вещи

  1. Переименуйте файл (как вы сделали)
  2. Переместите его из корня пути к классам и поместите, например, в META-INF вместо.
Другие вопросы по тегам