spring - quartz jboss spring 多个 webapp

标签 spring jboss datasource quartz-scheduler

我已在我的应用程序中成功使用 quartz 。 基本上,我将 quartz 捆绑在 webapp1 内,该 webapp1 在 Jboss 内运行。

但是我们在 jboss 中运行了另一个 webapp2,它也需要有quartz 作业

现在我需要做的是让quartz调度程序作为某种服务在jboss中运行,并且两个web应用程序都应该能够 在单个 quartz 调度程序上注册他们的作业。

下面是我的 webapp1 的相关 spring 配置,到目前为止一直有效。

<bean id="qtzScheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="dataSource">
        <ref bean="jndiDataSource" />
    </property>
    <property name="applicationContextSchedulerContextKey">
        <value>applicationContext</value>
    </property>
    <property name="transactionManager">
        <ref bean="transactionManager" />
    </property>
    <property name="schedulerName" value="webapp1" />       
</bean>

<bean id="wrapperScheduler" class="uk.fa.quartz.schedule.ServiceScheduler">
    <property name="scheduler">
        <ref bean="qtzScheduler" />
    </property>
</bean>

<bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:/FmManagerDS</value>
    </property>
</bean>

当我必须安排工作时,代码如下:

   WrapperScheduler scheduler = (WrapperScheduler) ctx.getBean("wrapperScheduler");
   scheduler.scheduleCronJob(job, jobName + "CronTrigger", WrapperScheduler.TRIGGER_GROUP, cronExpression);

现在我不想在 webapp2 中再次定义相同的调度程序,这将导致 2 个quartz 调度程序在 jboss 中运行。

有人知道该怎么做吗? 我在互联网上看到一个例子,如下Link我认为这是在做我想做的事。 但我不明白如何使用 spring 源中定义的数据源将其与我的系统集成。 如果有人可以分享配置或向我指出互联网上正确的资源,我将非常感激。

最佳答案

link您引用解释如何访问Quartz调度程序服务built into JBoss 。我从来没有使用过这种方法,但基本上你让 JBoss 处理你的调度程序、数据源和它周围的一切。这使得利用作业调度变得非常容易,而无需进行所有的配置工作 - 但不是很灵活,并且您的应用程序不再是独立的。

就您的情况而言,我看到两个值得研究的选项:

集群 Quartz 调度程序

将两个 Web 应用程序配置为 run in a cluster 。两个应用程序将共享相同的数据库,并将运行彼此定义的作业。由于以下几个原因,这可能不适合您:

  • 两个应用程序必须能够运行彼此定义的作业 - 例如作业类别必须在 CLASSPATH 上可用

  • 您仍然需要在两个应用程序中定义 Quartz 配置(不过您可以轻松共享配置,例如通过将 XML 配置提取到单独的文件中)

  • 两个应用程序都将维护单独的线程池

集群更适合在多台机器上运行的同类应用程序,而不是在单个节点上运行的异构应用程序。

远程调度程序

quartz 有一个 built-in support for remote schedulers通过 。基本上,一个应用程序托管成熟的 Quartz 服务器,而另一个应用程序连接到该服务器。这对您来说似乎是一种更好的方法(让我们称之为“主从”),因为只有一个应用程序管理调度程序,而另一个应用程序使用现有的调度程序。

参见:RemoteScheduler .

关于spring - quartz jboss spring 多个 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11936797/

相关文章:

java - 在 jboss/bin 而不是 jboss/standalone/deployments 中创建的文件

grails - 在单元测试中使用DataSource

java - spring 在运行时添加数据源

java - gradle + spring MVC + spring boot + jsp = 404错误?

java - Spring POST 请求不支持的媒体类型 415

java - JVM 中的段错误导致堆栈溢出,但仅限于 VMWare

tomcat - JBoss 支持 Websockets 吗?

java - 在 wildfly 8 中使用 apache commons BasicDataSource

java - Spring boot 1.5.2 未部署在 Openshift Tomcat 7(JBoss EWS 2.0) 中

java - 具有 Maven 配置文件属性的 Spring 3 @value 注释