创建 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) 导入约束

Spring配置文件详解:applicationContext.xml

使用SpringBoot构建项目,加载SSM整合的applicationContext.xml的注解