Файл определения 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();