Quartz作业错误:作业类必须实现Job接口

时间:2017-10-16 14:42:42

标签: java spring spring-boot quartz-scheduler urlclassloader

我有一个spring boot应用程序,它使用自定义类加载器在运行时从外部库加载jar,然后创建Quartz Jobs。类加载器从上下文类加载器中获取所有URL,然后添加外部jar。从类加载器中记录所有文件时,我可以看到所有必需的jar都在那里。我找到了一些其他帖子,提到这是一个类加载器问题,但我不确定我能做些什么不同。以下是我使用的代码:

        loader = myLoader.getMyLoader(branchName);

        log.info("POST LOAD EXTERNAL JARS");
        for (URL url : loader.getURLs()) {
            log.info(url.getFile());
        }

        Class<? extends Job> myClass = (Class<? extends Job>) loader.loadClass(module.getClassnamelong()).newInstance().getClass();
        log.info("module class created: " + myClass.getName());

        jobDetail = JobBuilder.newJob(myClass).setJobData(getJobDataMapFrom(module, instance)).withIdentity(jobName, module.getModulename()).build();

JobBuilder.newJob()中发生了失败。我加载的类都扩展了一个实现Job的基本抽象类。

我发现如果我将外部jar包装到我的spring引导应用程序中,它们可以很好地跳过运行时类加载。我的目标是将这些作为插件,可以说,我们可以在不重新部署整个应用程序的情况下进行修改。

0 个答案:

没有答案