我有一个 Spring Web 应用程序,它applicationContext.xml
通过ContextLoaderListener
. XmlWebApplicationContext
应用程序上下文有一个 Quartz 调度程序(使用SchedulerFactoryBean
like here定义),但没有触发器或作业详细信息。
在加载这个主应用程序上下文期间,我加载了一些包含它们自己的文件的“插件”JAR pluginApplicationContext.xml
。每个都作为 main 的子项pluginApplicationContext.xml
加载到 a中。GenericXmlApplicationContext
XmlWebApplicationContext
这些插件可能包含QuartzJobBean
在上面讨论的调度程序中调度的 Quartz 作业 ( )。调度必须通过 Quartz API 以编程方式完成,但这对我来说很好。当工作被触发时,它被 Quartz 很好地实例化,并且因为它扩展了QuartzJobBean
,我能够让电流ApplicationContext
通过setApplicationContext
. 这里的问题是我得到了XmlWebApplicationContext
而不是GenericXmlApplicationContext
从中安排了工作。因此,我无法调用getBean
来检索插件中定义的 bean。
我很理解为什么会发生这一切。但我找不到一个干净且可重复使用的解决方案来处理它。我已经了解了 OSGi,但我们正在现有应用程序上实现这个插件系统,而不是从头开始创建一个新系统并将整个应用程序迁移到 OSGi 将是太多工作要做。你知道 OSGi 和其他插件框架是如何处理这种情况的吗?
非常感谢你的帮助