项目运行一段时间,会报错:
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call ‘refresh‘ before accessing beans via the ApplicationContext
环境:
spring项目中用到了quartz定时器,其中定时任务job中用到了类似如下的代码:
String realService = ""; int isRedis = Integer.parseInt(PropertieUtil.getConfig("config.isRedis")); if (isRedis==1) { //切换为redis版本 realService = "xxxServiceImpl1"; }else { realService = "xxxServiceImpl2" } //本地查询文档表服务 XxxService xxxService = (XxxService) SpringContext.getApplicationContext().getBean(realService);
本意是想根据配置文件中的一个字段来决定加载哪个具体实现类,实现版本切换。
解决:
百度了一下,
找到如下文章:
=======================
自己思路:
想到可能是job里面是多线程,多线程中用SpringContext.getApplicationContext().getBean 临时加载多个类可能会有问题,所以,改为不在代码里判断使用哪个实现类,而是直接在项目启动时就将要使用的实现类直接配置的 spring的配置文件的 xml中的 bean 中。
原文:https://www.cnblogs.com/libin6505/p/10819734.html