Файл определения XML-компонента пропущен из-за несоответствия указанных профилей [по умолчанию]

У нас есть приложение Spring, развернутое на tomcat, и оно не запускается.

Ошибка приложения заключается в следующем:

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested 
PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [${hibernate.connection.driver_class}]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:121)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1564)
... 49 more

У нас есть файл свойств, определенный по адресу: /opt/tomcat/appname/tomcat8-2 с тремя файлами: config.properties, core-ws.proprties и log4j-config.xml

Мы знаем, что ${TOMCAT_CONFIG_HOME} определен как: /opt/tomcat/appname/tomcat8-2

Мы знаем, что права доступа к файлам верны, у пользователя, запускающего tomcat, есть права на чтение каталогов и файлов в этом каталоге конфигурации. Я могу как пользователь tomcat редактировать / читать файл свойств. Итак, мы знаем, что это не проблема с разрешениями.

Из журнала приложения у нас есть это сообщение об ошибке:

Skipped XML bean definition file due to specified profiles [default] not matching: class path resource [spring/app-platform-entity-context.xml]

Файл контекста приложения Spring содержит следующие свойства:

<beans profile="default">
     <context:property-placeholder location="file:${TOMCAT_CONFIG_HOME}/core-ws.properties" />
 </beans>

Наконец, вот как выглядит core-ws.properties:

hibernate.connection.url=jdbc:oracle:thin:@//123.456.789/APP_DB
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.username=some_db_user
hibernate.connection.password=some_db_password

Итак, я изучал это в течение нескольких дней, и я нахожусь в своем уме. Я могу сказать, что у нас нет проблем с файлом log4j-config.xml. Приложение может найти это, и прочитать это просто отлично. это только один параметр, который, кажется, сбивает приложение...

Любая помощь в этом вопросе будет высоко ценится. Спасибо!

2 ответа

Решение

Причина, по которой файл XML был пропущен, заключалась в том, что в нашей настройке CATALINA_OPTS у нас был параметр -Dspring.profiles.active = prod.

Мы не нашли его, пока не начали экспортировать значения, которые были у tomcat.

Как только мы удалили эту строку, наш профиль [по умолчанию] перешел в режим управления, как и должно быть.

Спасибо!

Ответ на это для автономных приложений:

В моем случае это было из-за порядка установки ApplicationContext, я загружал файл xml перед настройкой профиля. Правильный порядок:

  GenericXmlApplicationContext ctx =
            new GenericXmlApplicationContext();
    ctx.getEnvironment().setActiveProfiles("dev");
    ctx.load("com/profiles/*-config.xml");
    ctx.refresh();
Другие вопросы по тегам