ClassCast异常,尽管使用Quartz Scheduler时类,包和类加载器相同

时间:2018-07-05 10:35:12

标签: java spring spring-boot classloader quartz

因此,我遇到了这个问题,我什至没有意识到可能会发生。 到目前为止,我的理解是JVM通过类名,程序包名和类加载器名的组合来识别类。我已经验证了所有这3个都匹配,但仍然收到ClassCastException。

@Component
public class SomeBean(){
//this is my service
}

我可以使用我的类中的spring autowired成功地将其注入,将其注入到Quartz Scheduler的上下文中,如下所示:

scheduler.getContext().put("Key",SomeBeanInstance);

我试图在Quartz Job的execute方法中获取该bean,大致如下:

SomeBean someBeanInstance = (SomeBean) schedulerContext.get("key");

这给了我类强制转换异常: cannot cast a.b.SomeBean to a.b.SomeBean。我在注入someBean的类和Quartz作业上都验证了classLoader,这是相同的。是RestartClassLoader (org.spring.devtools)

如何解决此问题?

是否有更好的方法将服务bean注入到石英作业中?

1 个答案:

答案 0 :(得分:0)

我对spring不熟悉,但是我将要谈论用Java进行转换

A b = (c)d
  

编译时间 检查(1):

dc的类型必须具有某种关系,即子对父或父对子   孩子或同类型。

  

编译时间 检查(2):

c必须与A相同或派生。

  

运行时 检查:

运行时对象类型d必须与c相同或派生类型。

注意:

我想在您的情况下您不满足上一次检查的要求。

相关问题