Code Bye

tomcat报spring错 IllegalStateException BeanFactory not initialized or already closed

项目使用个是spring,起了几个线程处理数据(查询数据,保存数据到库),刚启动没问题,但是过一段时间后,大概过了5-7分钟左右,就报错:java.lang.IllegalStateException: BeanFactory not initialized or already closed – call “”refresh”” before accessing beans via the ApplicationContext,很奇怪,各位大神,遇到这种事情过吗

ps:服务器上部署了多个tomcat,不知道是不是这个原因影响的。


20分

错误原因:BeanFactory没有实例化或者已经关闭。原因很简单:ApplicationContext ctx = new ClassPathXmlApplicationContext();Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件。

这正是这个错误的原因,修改为:ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

如果这样的话就不会出现这样的错误了。

applicationContext.xml,,,,可以是自己命名的xml。。。

来自网络:http://blog.sina.com.cn/s/blog_80e498b10100w10b.html


10分
你是不是写了获取xml的方式来创建服务,类似于下面的这种:
ApplicationContext ctx = new ClassPathXmlApplicationContext();
UserService service = (UserService)ctx.getBean(“bean.xml”);

10分
引用 1 楼 shijing266 的回复:

错误原因:BeanFactory没有实例化或者已经关闭。原因很简单:ApplicationContext ctx = new ClassPathXmlApplicationContext();Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件。

这正是这个错误的原因,修改为:ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

如果这样的话就不会出现这样的错误了。

applicationContext.xml,,,,可以是自己命名的xml。。。

来自网络:http://blog.sina.com.cn/s/blog_80e498b10100w10b.html

我就是ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);这样配置的哦,不是这个原因

ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);
你这样使用,每次使用都会重启服务的。
引用 4 楼 tjcyjd 的回复:
Quote: 引用 1 楼 shijing266 的回复:

错误原因:BeanFactory没有实例化或者已经关闭。原因很简单:ApplicationContext ctx = new ClassPathXmlApplicationContext();Spring实例化BeanFactory的时候是默认到classPath下面查找名为applicationContext.xml的文件。

这正是这个错误的原因,修改为:ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

如果这样的话就不会出现这样的错误了。

applicationContext.xml,,,,可以是自己命名的xml。。。

来自网络:http://blog.sina.com.cn/s/blog_80e498b10100w10b.html

我就是ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);这样配置的哦,不是这个原因

其实我也不太懂,所以才去网上帮你搜答案, applicationContext.xml为啥不用 web.xml去配置,而要这样去获取呢

还有个奇怪的问题是,我本地没出现这个问题,放到服务器上就出现这个问题了,很奇怪的一个问题啊
引用 5 楼 fangmingshijie 的回复:

ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);
你这样使用,每次使用都会重启服务的。

我做个了单例模式,不会出现这样的问题

多线程环境下出的问题都是很诡异的,跟各线程的代码执行先后顺序有关系,所以你本地没问题,但是服务器有问题。我觉得在你的多线程环境中存在2个以上ApplicationContext对象,即存在多个spring容器,其中一个spring容器的beanFactory已经关闭了,另一个线程却调用了它,好好检查下代码吧。
引用 9 楼 huangan0301 的回复:

多线程环境下出的问题都是很诡异的,跟各线程的代码执行先后顺序有关系,所以你本地没问题,但是服务器有问题。我觉得在你的多线程环境中存在2个以上ApplicationContext对象,即存在多个spring容器,其中一个spring容器的beanFactory已经关闭了,另一个线程却调用了它,好好检查下代码吧。

怎么解决?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明tomcat报spring错 IllegalStateException BeanFactory not initialized or already closed