创建 ApplicationContext.xml 中定义的 bean 时出错
Posted
技术标签:
【中文标题】创建 ApplicationContext.xml 中定义的 bean 时出错【英文标题】:Error creating bean defined in ApplicationContext.xml 【发布时间】:2021-05-20 15:41:41 【问题描述】:我正在将 Spring(v.4.3.2) 应用程序从 Tomcat7 移植到 Tomcat9。我在 Windows 机器上将 Tomcat 作为服务运行。在我的 ApplicationContext.xml 中,我定义了几个 Beans 配置文件,并且在配置文件之外还有 bean 定义:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="utilsDS" />
</bean>
.......
....
<bean id="utilsDS" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
</bean>
....
</beans>
当我启动 Tomcat 时,我传递了一个 JVM 选项:
-Dspring.profiles.active='UAT'
Tomcat 7 可以很好地启动我的应用程序并且我能够运行它。但是使用 Tomcat 9 时出现错误
org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
org.springframework.beans.factory.BeanCreationException:
在 ServletContext 资源 [/WEB-INF/config/applicationContext.xml] 中定义名称为“transactionManager”的 bean 创建错误: 设置 bean 属性“dataSource”时无法解析对 bean“utilsDS”的引用; 嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 没有定义名为 'utilsDS' 的 bean
“applicationContext.xml”在 Tomcat 7 和 9 上是相同的,因为我使用相同的 WAR 来部署应用程序。我不确定我错过了什么。 在我看来,Tomcat9 的配置中的某些东西可以解决该参考。我不确定它是什么。
【问题讨论】:
【参考方案1】:我将 context-param 添加到应用程序“web.xml”并且它可以工作:
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
仍然不确定为什么要传递 JVM 选项:
-Dspring.profiles.active=dev
没用
【讨论】:
以上是关于创建 ApplicationContext.xml 中定义的 bean 时出错的主要内容,如果未能解决你的问题,请参考以下文章
eclipse中Spring创建applicationContext.xml后程序却找不到该文件
Eclipse RCP 找不到 applicationContext.xml
六祎- JavaSpring整合Mybatis-applicationContext.xml
Spring主配置文件(applicationContext.xml) 导入约束