我有一个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引导应用程序中,它们可以很好地跳过运行时类加载。我的目标是将这些作为插件,可以说,我们可以在不重新部署整个应用程序的情况下进行修改。