我的应用程序的Spring Context无法初始化。任何人都可以帮助我理解它为什么失败以及如何解决它?
以下是警告&我收到的错误消息:
[WARN]在bean上调用destroy方法'shutdown'失败 名称'cxf'
org.springframework.beans.factory.BeanCreationNotAllowedException: 创建名为'entityManagerFactory'的bean时出错:Singleton bean 当这家工厂的单身人士进入时,不允许创作 破坏(不要在destroy中从BeanFactory请求bean 方法实现!)
org.springframework.web.context.ContextLoader [ERROR]上下文初始化失败
<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" destroy-method="shutdown"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="${persistence.unit}"/>
<property name="dataSource" ref="pooledDs"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
<property name="showSql" value="false"/>
<property name="generateDdl" value="false"/>
</bean>
</property>
</bean>
答案 0 :(得分:4)
CXF网站在其示例配置中不包含destroy-method
调用,因此看起来这是一个配置错误。有关详细信息,请参阅此页:http://cxf.apache.org/docs/interceptors.html。
我还发现了此问题的错误跟踪器:https://issues.apache.org/jira/browse/CXF-2164。似乎在早期版本的CXF中没有隐式调用destroy方法,但是在v2.2.11中已经修复了它。
所以,我的建议是至少启动该版本,并在配置中使用<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" />
。
答案 1 :(得分:0)
在我的情况下,我在版本2.5.0中遇到了同样的问题,但那是我的错。
我在上下文中有错误的bean。
详细说明:我使用@Controller
注释了Spring MVC Controller(名为OrderController),没有定义名称(注释驱动)。在另一个CXF上需要xml配置AFAIK,所以我使用java配置命名bean(使用@Bean
)作为orderController
并且以某种方式初始化cxf时Spring使用了这个错误的MVC控制器并且在上面列出的错误时失败了。
org.springframework.beans.factory.BeanCreationNotAllowedException:创建名为'cxf'的bean时出错:当此工厂的单例处于销毁状态时不允许使用单例bean创建(不要在destroy方法实现中从BeanFactory请求bean) !)