java - ClassCastException,尽管使用Quartz Scheduler时类,包和类加载器相同

标签 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注入到石英作业中?

最佳答案

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

A b = (c)d



  编译时检查(1):


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


  编译时检查(2):


c必须与A相同或衍生。


  运行时检查:


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

注意:

我想在您的情况下,您不满意上次检查。

关于java - ClassCastException,尽管使用Quartz Scheduler时类,包和类加载器相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51189137/

相关文章:

java - 如何在 Java 中创建覆盖窗口?

java - 根据用户输入在数组中对数字进行排序 Java

java - Spring Boot Logback 记录 DEBUG 消息

java - Spring Boot微服务: dynamic role, 基于权限的安全

python - SpringBoot org.springframework.beans.factory.UnsatisfiedDependencyException 异常

java - 如何用java将套接字绑定(bind)到IP?

java - 如何使用 twitter4j 获取用户时间线

java - 来自validation.api的@Pattern想要在一个属性文件中配置所有模式

java - 指定 varchar 的长度和默认值时出现 SQLException

带有 Subversion 后端的 Spring Cloud 配置