Инициализация 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>
Как объясняется в справочном руководстве по загрузке Spring ( Externalized Configuration), он будет искать файл с именем application.properties
, Однако, что они не говорят вам, что вместо application.properties
это также может быть application.xml
,
java.util.Properties
объект может быть загружен из .properties
или же .xml
файл. Spring (и, следовательно, Spring Boot) имеет неявную поддержку для этого.
Короче говоря, загрузка конфигурации будет определять application.properties
, application.yml
но также application.xml
,
Чтобы исправить вы можете сделать 2 вещи
- Переименуйте файл (как вы сделали)
- Переместите его из корня пути к классам и поместите, например, в
META-INF
вместо.