我需要构建一个显示某种“作业队列”的图形用户界面。
我动态创建触发器并使用 安排它们jobScheduler.scheduleJob(trigger);。我还通过触发器的数据映射传递一些数据。
如何取回尚未触发的触发器列表?
我找到了一种获取当前正在运行的作业的方法,但无法获取已注册触发器的列表。
我是否应该自己维护这个列表,并在它完成执行时通过实现触发侦听器来删除内容?
我可以获取底层 JobStore 并调用 getTriggerNames() 或类似方法吗?但我怎样才能获得JobStore。我拥有的只是一个 Scheduler 实例(实际上是一个 StdScheduler),并且似乎无法从中获取 JobStore 实例。
(我使用 spring 从 SchedulerFactoryBean 获取 Scheduler)
我正在使用石英调度程序来安排我的工作。我用过CronTrigger。但问题是触发器会被多次触发。这是我设置 cron 调度程序的代码..
SchedulerFactory schFactory = new StdSchedulerFactory();
Scheduler sched = null;
CronTrigger cronTrigger = null;
try {
sched = schFactory.getScheduler();
JobDetail jobDetail = new JobDetail("job1", "group1",SchedulerPBGC.class);
String cronTimerStr = "* 16 15 * * ? *";
LOG.warn("CRON TRIGGER FORMAT FOR PROCESSING PB GC DATA:"+cronTimerStr);
cronTrigger = new CronTrigger("SchedTrigger", "Group1", cronTimerStr);
sched.scheduleJob(jobDetail, cronTrigger);
sched.start();
LOG.warn("SCHEDULER REGISTERED FOR PROCESSING PB GC DATA : TIME :"+cronTimerStr);
} catch (SchedulerException se) {
LOG.error("SchedulerException Message::"+se.getLocalizedMessage());
}
Run Code Online (Sandbox Code Playgroud)
这里我的调度程序执行了作业 10 次...在这里你可以看到日志..
2012-06-20 15:16:50,001 DefaultQuartzScheduler_Worker-1 WARN test.SchedulerPBGC …Run Code Online (Sandbox Code Playgroud) 我使用quartz来调度我的作业,当我使用RAM作业存储时,调度程序启动并成功触发,但当我使用JDBC存储时,它无法启动。你能指导一下吗,我已经放置了以下文物,
# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 2
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.dataSource.myDS.driver = org.hsqldb.jdbc.JDBCDriver
org.quartz.dataSource.myDS.URL = jdbc:hsqldb:file:x\\myds
org.quartz.dataSource.myDS.user = SA
org.quartz.dataSource.myDS.password = sa
org.quartz.dataSource.myDS.maxConnections = 30
Run Code Online (Sandbox Code Playgroud)
这些是我的日志...
2014-01-17 11:36:42 INFO MLog:80 - …Run Code Online (Sandbox Code Playgroud) 我一直在使用石英调度程序每小时发送大量电子邮件,这工作得非常好。这个调度器被显式调用一次。当服务器在调度程序执行过程中重新启动时,就会出现问题。虽然quartz调度器在JOB_DETAILS表中创建了一条记录,但不占用服务器启动时自动执行的任务。
任何解决此问题的帮助表示赞赏。
以下是示例代码和当前配置。
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler;
try {
scheduler = factory.getScheduler();
// Creating Job and link to our Job class
JobDetailImpl jobDetail = new JobDetailImpl();
jobDetail.setName(jobName);
jobDetail.setJobClass(HelloJob.class);
int repeat = totalBal/Constants.HOURLY_LIMIT;
System.out.println("totalBal : "+totalBal+ " | "+ "repeat : "+repeat);
// Creating schedule time with trigger
SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
simpleTrigger.setStartTime(new Date(
System.currentTimeMillis() + 1000));
simpleTrigger.setRepeatCount(repeat); // SimpleTrigger.REPEAT_INDEFINITELY
//simpleTrigger.setRepeatInterval(3600000);
simpleTrigger.setRepeatInterval(5000);
simpleTrigger.setName(jobName);
// Start scheduler
System.out.println("Scheduler Started");
scheduler.start();
scheduler.getContext().put("externalInstance", cmpgId);
scheduler.scheduleJob(jobDetail, simpleTrigger);
} catch (SchedulerException e) …Run Code Online (Sandbox Code Playgroud) 在 6 个实例上运行石英集群调度程序时,我们随机得到以下异常:
无法获取下一个触发器:尝试获取锁时发现死锁;尝试重新启动事务
这是我们的quartzConfig.properties
scheduler.skipUpdateCheck = true
scheduler.instanceName = 'quartzScheduler'
scheduler.instanceId = 'AUTO'
threadPool.threadCount = 13
threadPool.threadPriority = 5
jobStore.misfireThreshold = 300000
jobStore.'class' = 'org.quartz.impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = true
jobStore.dataSource = 'myDS'
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 10000
dataSource.myDS.driver='com.mysql.jdbc.Driver'
dataSource.myDS.maxConnections = 15
Run Code Online (Sandbox Code Playgroud)
我们在mysql db的应用程序中使用quartz grails插件(带有quartz 2.2.1)。
我有一个 cron 属性文件,其中一些属性包含如下表达式:
"* 0/5 * * * ?"
Run Code Online (Sandbox Code Playgroud)
其中一些包含:
"* */5 * * * ?"
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?
如果我想每 5 分钟运行一次,那么应该使用哪一个?
谢谢
PS:我的项目正在使用 spring 调度程序。
我已经创建了文件quartz.properties并将其放在类路径中。属性是
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
Run Code Online (Sandbox Code Playgroud)
但是当我启动应用程序时,我收到此消息
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
Run Code Online (Sandbox Code Playgroud)
它是否加载属性?无论如何,我只为调度程序运行一个线程......
我正在使用cron-utils库进行调度。当我同时提供 DoM 和 DoW 时,我得到以下异常
不支持星期几和月份参数。
我发现这个异常符合 QUARTZ 规范。
我想知道为什么不支持?因为它似乎是在“ 9 月 5 日仅在星期日”运行类似的有效要求
我是否需要编写两个单独的表达式并取其交集?
这个问题的推荐解决方案是什么?
我一直在尝试向我的客户发送通知。我正在使用 kubernetes 并且我创建了多个 Spring Boot 应用程序,因为我有 2 个副本。这一切都很好,但是当调度程序运行时,他们每个人都可以发送通知。我看过一点点石英,但配置似乎有点复杂。有没有简单的方法来做到这一点?
@Scheduled(fixedDelayString = "300000")
public void sendFlowerNotification() {
//Code
}
Run Code Online (Sandbox Code Playgroud) 如果我想用 maven 包构建我的项目,我会收到 maven 的警告:在构建有效模型时遇到了一些问题
ch.mobi.ama:logcollector:jar:1.0.0-SNAPSHOT [警告] 'dependencyManagement.dependencies.dependency.exclusions.exclusion.artifactId' for org.quartz-scheduler:quartz:jar 与值 '*' 不匹配有效的 ID 模式。@ org.springframework.boot:spring-boot-dependencies:2.1.6.RELEASE, c:\ieu.m2\repository\org\springframework\boot\spring-boot-dependencies\2.1.6.RELEASE\spring-boot- dependencies-2.1.6.RELEASE.pom,第 2619 行,第 25 列
我尝试过旧的 Spring Boot 版本。2.1.5 版也有同样的问题。2.1.4 没有警告。在指定文件 spring-boot-dependencies-2.1.6.RELEASE.pom 的第 2619 行实际上有如下代码
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
<exclusions>
<exclusion>
<artifactId>c3p0</artifactId>
<groupId>com.mchange</groupId>
</exclusion>
<exclusion>
<artifactId>*</artifactId>
<groupId>com.zaxxer</groupId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
由于给定的代码来自Spring Boot,我无法影响它,有一种不好的感觉。我的项目会被正确构建吗?我必须回到 2.1.4 版吗?我是否必须报告 Spring Boot 的问题?我能做什么?
quartz-scheduler dependency-management parent-pom spring-boot-starter