由于指定的配置文件 [默认] 不匹配,已跳过 XML bean 定义文件
Skipped XML bean definition file due to specified profiles [default] not matching
我们在 tomcat 上部署了一个 Spring 应用程序,但它没有启动。
应用报错如下:
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对该config目录下的目录和文件有读取权限。我可以作为 tomcat 用户 edit/read 属性文件。所以,我们知道这不是权限问题。
从应用程序日志中,我们收到以下错误消息:
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>
最后是核心-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 文件没有问题。该应用程序可以找到它,并且可以很好地阅读它。只是这个参数似乎使应用程序崩溃了...
如能就此事提供任何帮助,我们将不胜感激。谢谢!
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();
我们在 tomcat 上部署了一个 Spring 应用程序,但它没有启动。
应用报错如下:
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对该config目录下的目录和文件有读取权限。我可以作为 tomcat 用户 edit/read 属性文件。所以,我们知道这不是权限问题。
从应用程序日志中,我们收到以下错误消息:
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>
最后是核心-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 文件没有问题。该应用程序可以找到它,并且可以很好地阅读它。只是这个参数似乎使应用程序崩溃了...
如能就此事提供任何帮助,我们将不胜感激。谢谢!
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();