标签: quartz-scheduler

JSF 2 + Quartz调度库

我有一个使用JSF 2的Web应用程序.在这个应用程序中,我使用的是一个从xml文件获取数据的图表库,当有人访问该站点时,应用程序会更新xml文件,因为jsf 2 Action.现在我想实现Quartz库的开源调度库,更新xml文件而不依赖于用户操作,但我不知道如何使用JSF 2从Quartz调用Action.

先谢谢你们.

jsf quartz-scheduler jsf-2

2
推荐指数
1
解决办法
3256
查看次数

使用Quartz时无法创建JobDetail接口的实例

这是我第一次使用Quartz.我正在尝试一个预先打印"Hello World"的示例程序.但是,当我尝试运行它时,我得到一个错误说

线程"main"中的异常java.lang.RuntimeException:无法编译的源代码 - org.quartz.JobDetail是抽象的; 无法在QuartzAppSimpleTrigger.main中实例化(QuartzAppSimpleTrigger.java:18)

当我在Netbeans中尝试它时,它要求我实现JobDetail的所有抽象方法.以下是我的代码示例.

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

public class HelloSchedule {

    public HelloSchedule() throws Exception {
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();
        sched.start();
        JobDetail jd = new JobDetail("myjob", sched.DEFAULT_GROUP, HelloJob.class);
        SimpleTrigger st = new SimpleTrigger("mytrigger", sched.DEFAULT_GROUP, new Date(),
                null, SimpleTrigger.REPEAT_INDEFINITELY, 60L * 1000L);
        sched.scheduleJob(jd, st);
    }

    public static void main(String args[]) {
        try {
            new HelloSchedule();
        } catch (Exception e) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

HelloJob.java是 …

java quartz-scheduler

2
推荐指数
1
解决办法
1万
查看次数

Quartz Scheduler和JMS有什么区别?

我想知道Quartz Scheduler和JMS之间有什么区别,在什么情况下更好地使用这些工具......

java jms quartz-scheduler java-ee

2
推荐指数
1
解决办法
2162
查看次数

如何在特定时间每天解雇akka调度程序?

我创建了一个Akka的调度程序,每天发送邮件一段固定的时间(例如每天早上6点).那么如何调用演员呢?我的意思是我应该使用什么逻辑?谢谢.

scheduling scheduler quartz-scheduler job-scheduling akka

2
推荐指数
1
解决办法
2700
查看次数

Spring 3的Quartz 2实现不再支持requestsRecovery

根据Quartz 2的文档

RequestsRecovery - 如果一个作业"请求恢复",并且它正在调度程序的"硬关闭"期间执行(即它在崩溃中运行的进程,或者机器被关闭),那么它将被重新执行当调度程序再次启动时.在这种情况下,JobExecutionContext.isRecovering()方法将返回true.

Spring3支持Quartz 1.x和Quartz 2.x. 如果我们使用Quartz 1.x那么我们需要使用以下配置来创建JobDetailbean:

<bean id="ldapSynch" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.edfx.adb.scheduling.job.LDAPSynchronizer" />
    <property name="requestsRecovery" value="true" />       
</bean>
Run Code Online (Sandbox Code Playgroud)

内部org.springframework.scheduling.quartz.JobDetailBean扩展org.quartz.JobDetail并在Quartz 1.x中org.quartz.JobDetail有一个setter public void setRequestsRecovery(boolean shouldRecover).

但是如果我们使用Spring3的Quartz 2.x实现那么上述配置会改变为:

<bean id="ldapSynch" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.edfx.adb.scheduling.job.LDAPSynchronizer" />
    <property name="requestsRecovery" value="true" />       
</bean>
Run Code Online (Sandbox Code Playgroud)

并且在Quartz 2.x中没有这样的org.quartz.JobDetail类,而是它是一个interface并且最终org.springframework.scheduling.quartz.JobDetailFactoryBean不再采用参数<property name="requestsRecovery" value="true" />.

我们怎样才能将这个重要的内容传递parameter给Quartz的调度程序?

java quartz-scheduler spring-3

2
推荐指数
1
解决办法
3628
查看次数

在运行时重新安排Quartz

在我的项目中,我们是Quartz用户的新手,编写我们的第一个Quartz任务.我们的任务正在运行,但显然我们想要了解如何管理它们.我们在Spring中配置它们就像这样:

<bean name="enoteExpirationTask"    class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="gov.usdoj.afms.enote.job.DailyExpirationJob" />
    <property name="jobDataAsMap">
        <map>
            <entry key="messageService" value-ref="enoteMessageService" />
            <entry key="logicalDeleteAge" value="${expiryProcess.logical.age}" />
            <entry key="physicalDeleteAge" value="${expiryProcess.physical.age}" />
        </map>
    </property>
</bean>
<bean id="cronEnoteExpirationTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="enoteExpirationTask" />
    <property name="cronExpression" value="0 0 7 * * ?" />
</bean>
Run Code Online (Sandbox Code Playgroud)

问题1:我可以让Quartz重新读取这个配置,这样如果我在运行时改变它,它会改变它的时间表吗?这将是最简单的解决方案,但我们没有看到任何内容.我希望我们错过了一些东西.

问题2:如果没有,我理解应该有第三方工具来做到这一点,Teracotta就是其中之一.是否有任何开源或免费软件实用程序可以让您非常简单地更改计划?

问题3:如果没有,编写一个小Java实用程序会涉及到什么?写一个是值得的吗?或者Teracotta是否有足够的增值值,你会建议买它?如果是这样,我可以向管理层出售的功能有何不同?

java spring quartz-scheduler

2
推荐指数
1
解决办法
3940
查看次数

Cron表达式在过去30分钟后运行

我想安排一个使用Quartz的工作在一小时后运行30分钟.例如,我希望工作在00:30,1:30,2:30运行,依此类推.

你能帮助我得到正确的cron表达吗?

java spring quartz-scheduler quartz

2
推荐指数
1
解决办法
8058
查看次数

如何保存Quartz执行的作业?

一个问题是,执行完作业后,石英从数据库qrtz_triggers表中删除了作业,但是在特定情况下需要重复执行失败的作业。

执行后是否有任何配置选项或将作业存储到另一个表的方式???

谢谢

java jboss quartz-scheduler

2
推荐指数
1
解决办法
2525
查看次数

在quartz插件中使用grails数据源

我想在Burt的例子中创建使用JdbcStore的石英作业,如文档的聚类部分所述.

该示例显示了如何使用quartz.properties文件配置quartz.

现在,我希望我的jdbc存储与我的grails应用程序是同一个数据库,这样我就可以复制更少的设置了.

那么,假设我在我的数据库中手动创建了所需的表,是否可以使用在石英插件中使用Datasource.groovy中配置的默认dataSource?

我使用的是grails 2.4.4和quartz 1.0.2.

换句话说,我可以将我的设置添加到QuartzConfig.groovy而不是创建一个新的quartz.properties文件吗?至少我可以从单独的环境设置中受益.

这样的东西在QuartzConfig.groovy中是否有效?

quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
exposeSchedulerInRepository = true

props {
    scheduler.skipUpdateCheck = true

    threadPool.class = 'org.quartz.simpl.SimpleThreadPool'
    threadPool.threadCount = 50
    threadPool.threadPriority = 9

    jobStore.misfireThreshold = 60000

    jobStore.class = 'impl.jdbcjobstore.JobStoreTX'
    jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'

    jobStore.useProperties = false
    jobStore.tablePrefix = 'QRTZ_'
    jobStore.isClustered = true
    jobStore.clusterCheckinInterval = 5000

    plugin.shutdownhook.class = 'org.quartz.plugins.management.ShutdownHookPlugin'
    plugin.shutdownhook.cleanShutdown = true

    jobStore.dataSource = 'myDS'
    // [...]
}
Run Code Online (Sandbox Code Playgroud)

grails quartz-scheduler grails-plugin

2
推荐指数
1
解决办法
2500
查看次数

石英和mysql的自动模式创建失败,并带有MySQLSyntaxException

我有一个正在运行mysql数据库的Spring Boot 2应用程序,想要添加Quartz调度程序。组态:

spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false
Run Code Online (Sandbox Code Playgroud)

但是在启动时,它不会创建数据库表,并且在访问QRTZ_ *表时会失败。我调试了我在ScriptUtilsSpring调用的类中发现的执行石英脚本的原因tables_mysql_innodv.sql。特意抑制了该异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获取在'DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS附近使用正确的语法;如果存在第9行的DRTZ_SCHEDUL',则删除表

我看不到任何语法错误,当我直接在MySQL Workbench中执行相同的脚本时,它运行良好,即创建表等。

此处提供了已执行的启动脚本的源代码。在这一行遇到异常。有一个发现使我感到困惑:同一方法中的代码尝试拆分SQL语句,但仅提取2条语句-第一行#和其余脚本。也许这是实际的问题。

那么,我该如何解决呢?

版本信息:

  • Spring Boot 2.0.2.RELEASE
  • 的mysql:MySQL的连接器-Java的:5.1.46
  • org.quartz-scheduler:quartz:2.3.0

java mysql spring quartz-scheduler spring-boot

2
推荐指数
1
解决办法
3416
查看次数