创建bean时出错,不允许创建单例bean。

22
当我通过JUnit测试用例执行代码时,出现以下异常: org.springframework.beans.factory.BeanCreationNotAllowedException: 创建名为'somarFactory'的bean时出错:在该工厂的单例处于销毁状态时不允许创建单例(不要在销毁方法实现中从BeanFactory请求bean!) 请问可能有什么问题?

2
在bean工厂关闭阶段或者当前不允许创建bean时,如果请求获取一个bean,则会抛出此异常。 - Lucky
3
请添加一些细节以更好地理解。 - Kathir
请问您能在这里提供指导吗:https://stackoverflow.com/questions/53959982/error-creating-bean-with-name-eurekainstanceconfigbean-singleton-bean-creatio? - Jeff Cook
11个回答

18

检查是否有多个Tomcat实例。
如果是这种情况,请关闭所有实例,然后只打开一个实例。
希望这能帮助你。


1
你的提示救了我的命!我正在运行Windows8,第一次遇到一个“分离”的进程(tomcat),它在任务管理器中没有列出(尽管我的Tomcat8正在作为服务运行)。我打开了VisualVM,它显示了一个tomcat实例/pid,我用“taskkill /pid 10752 /f”(f开关=强制)杀掉了它。该死的微软。 - Mariusz
1
亲爱的朋友,我为你感到高兴。 - Kadiri

7

点击此处进入该主题讨论。

我猜您也有同样的问题...

JAVA_HOME路径设置正确并升级JDK至版本7,然后尝试重启服务器即可解决此问题(参考方案)。

我认为这个方法可以解决您的问题。


7
我发现问题不在于JAVA_HOME,但这也可能是正确的。我的问题是由于测试用例失败导致调度程序关闭,稍后再访问bean时出现了问题。 - Kathir
8
链接似乎已失效,这就是为什么通常在本网站之外引用答案是不好的做法。 - Anders Metnik
@AndersMetnik 更新JAVA_HOME和JDK到1.7解决了问题。这也在我参考的链接中提到了。 :) - Lucky
正如@Kathir所提到的,这不是JAVA_HOME问题。在Spring集成测试中存在一种情况,其中上下文关闭被触发,在其中一些基于线程的执行尝试访问bean。 - ScanQR
2
提供的链接 http://forums.alfresco.com/forum/installation-upgrades-configuration-integration/installation-upgrades/singleton-bean-creation 无法打开。 - Jeff Tian

5

在我的情况下,我使用多个线程来调用bean方法,在所有线程都完成之前调用context.close()会抛出此异常。移除context.close后,我的问题得到解决。希望对您有所帮助。


3

在我的集成测试中,我在调用Spring Data Repository的find方法时遇到了这个错误。

我的测试代码使用了@Async@Scheduled。经过一番研究后,我禁用了这两个功能,问题得到了解决。


2
如果这些注释是必要的呢? - chill appreciator
你是在尝试在测试中使用这些注释吗?这些注释仅在测试中被禁用了。 - Dherik

2
在我的情况下,使用@Transactional解决了多个事务之间的事务冲突。
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)

我正在使用Spring Boot + Spring Data


@Transactional 究竟是如何解决你的问题的?你把这个注解放在了哪里? - Arthur
如果我没记错的话,问题是我的测试用例由于事务不可用而无法创建bean。我想我是从测试用例开始的事务。 - Sumit Sundriyal

1
如果您有一个依赖项在提供范围内但在运行时不可用,也可能会出现此异常。

0
这个错误发生在你的服务处于销毁阶段时,也就是说Spring正在销毁bean的过程中,而在此期间你请求了一个资源或者尝试创建一个在销毁阶段被销毁的bean。

0

我真的不知道发生了什么!我通过VScode在Ubuntu服务器上远程运行一个项目。一切正常工作,直到我没有操作就出现了这个错误。

我所做的就是关闭远程VScode并重新连接。嘭!它又可以工作了!

我知道这可能对回答这个问题没有帮助。只是想分享一下我自己在这个错误上的奇怪经历,如果有人看到这个的话。


0

我也遇到过这个错误,但在我的情况下,我发现在错误消息的末尾,有两个端点具有相同的@requestmapping值,希望能对你有所帮助 :)


0

当测试方法完成之前,异步线程运行的时候,我遇到了这个错误。

解决方法是确保在线程工作完成之前,测试不会结束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接