我想在我的应用程序中使用Quartz Framework.调度程序中有两个作业.现在我想检查job1是否正在运行.我怎么检查?我曾试图谷歌但未能找到解决方案.
我正在关注Quartz发行版中的第一个示例.
我在用:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当应用程序出现时,我一直得到:
2013-01-03 15:25:34 UpdateChecker [DEBUG] Checking for available updated
version of Quartz...
2013-01-03 15:25:43 UpdateChecker [DEBUG] Quartz version update check failed:
java.io.IOException: Server returned HTTP response
code: 503 for URL: long url here
Run Code Online (Sandbox Code Playgroud)
我怎样才能消除这些?(消息和尝试更新)
我想公开一个用户界面来动态定义Quartz JOB.用户应该具有定义JOB属性的工具,例如JOB名称,cron表达式或时间间隔,任务等的特定java类.
是否有任何开源可以促进此功能?或者,如果我想为动态Quartz Scheduler创建自己的模块,那么应该采用什么方式呢?
我正在为python寻找一个企业任务调度程序,就像quartz用于Java.要求:
有什么建议?是否有特定于python的东西,或者是否可能(甚至是好的)从python接口到Quartz.
对于我的应用程序,我创建作业并使用CronTriggers安排它们.每个作业只有一个触发器,作业名称和触发器名称都相同.没有工作共享触发器.
现在当我创建像这样的"0/1****?"的cron触发器时 它指示作业每秒执行一次,它工作得很好.
当我第一次暂停工作时,问题就出现了:
scheduler.pauseJob(jobName, jobGroup);
Run Code Online (Sandbox Code Playgroud)
然后让我们说50秒后恢复工作:
scheduler.resumeJob(jobName, jobGroup);
Run Code Online (Sandbox Code Playgroud)
我看到的是,在这50秒内,作业没有按要求执行.但是,当我恢复工作的那一刻,我同时看到了50份执行工作!
我认为这是由于失火指令的默认设置,但即使在创建时将触发器的失火指示设置为:
trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
Run Code Online (Sandbox Code Playgroud)
同样的事情发生了.任何人都可以建议一种解决方法吗?
假设我有一个以这种方式配置的触发器:
<bean id="updateInsBBTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="updateInsBBJobDetail"/>
<!-- run every morning at 5 AM -->
<property name="cronExpression" value="0 0 5 * * ?"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
触发器必须与另一个应用程序连接,如果有任何问题(如连接失败),它应该每10分钟重试一次任务五次或直到成功.有什么方法可以配置触发器这样工作?
我在负载均衡器后面有一层相同的应用服务器.出于操作原因,我有一个约束,即两个应用服务器上的应用程序配置必须相同,以便可以轻松添加和删除节点.所有应用服务器共享同一个数据库.应用服务器不会/不会被群集.
到目前为止,这种方法运行良好,但现在我希望在一个应用服务器上执行预定的作业.所有应用服务器都将运行Quartz并具有相同的运行作业计划.触发器将在每个应用服务器上触发,但我希望只有一个应用服务器实际执行该作业 - 实际上它们都是竞争启动而且只有一个实际启动,其余的应用服务器只是忽略了该作业.这里的想法是,如果我们丢失一个应用服务器,另一个将运行该作业,如果我们添加新的应用服务器,他们将轮流运行作业.
我计划通过在数据库中创建一个"作业锁定"表来执行此操作,所有应用程序服务器在启动作业之前都会读取该表,并且只有在作业"解锁"时才会启动.首先对表进行更新的应用服务器将通过将表更新为运行状态/在作业结束时重置它来实质上阻止其他服务器.
在我构建之前,我很感激那些有更多石英经验的人的一些意见:
a)我可以将此行为挂钩到Quartz中,以便不必在每个作业的基础上完成吗?即开发人员可以添加新的工作而不必担心工作锁定,因为它被抽象掉了.
b)Quartz是否提供任何内置机制来实现类似于上面的内容,所以我不必自己滚动它?
谢谢!
有没有办法让@Scheduled石英作为底层调度程序?
我能想到的两件事,但都需要一些工作:
BeanPostProcessor将解析@Scheduled注释并注册石英作业的自定义TaskScheduler委托给石英Scheduler.问题是:是否已经针对上述两个选项编写了一些内容,还有其他选择吗?
我正在使用Quartz CronTrigger工具来解析cron调度格式字符串,以确定何时应运行特定作业.我实际上并没有使用Quartz安排工作.
CronTrigger中有一个名为getFireTimeAfter(Date)的方法,它给出下一次作业将在给定日期之后触发的时间.当提供的日期现在或将来时,这很有效.但如果日期已经过去,它似乎不起作用.
Date currTime = new Date();
CronTrigger tr = new CronTrigger();
tr.setCronExpression("0 0 23 3,18 * ? *");
Date nextFireAt = tr.getFireTimeAfter(currTime);
System.out.println("Reference time: " + currTime);
System.out.println("Next fire after reference time: " + nextFireAt);
Run Code Online (Sandbox Code Playgroud)
这是每月3日和18日23:00开火的cron时间表.例如,如果我今天(8月11日)这样做,我看到:
Reference time: Thu Aug 11 10:04:25 MDT 2011
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011
Run Code Online (Sandbox Code Playgroud)
但是,如果我将参考日期设置为过去,它会给我相同的下一个开火时间.
Reference time: Wed Dec 31 17:00:00 MST 1969
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011
Run Code Online (Sandbox Code Playgroud)
我期待输出为:
Reference time: …Run Code Online (Sandbox Code Playgroud) 我正在使用带有石英的弹簧批2.2.4在某个时间运行一些工作
问题是作业总是在第一次执行代码后运行,然后根据计划的时间运行.我想停止第一次运行,让它只根据预定的时间运行.
我的cron表达式是"0 0 0**?" 我也试过"0 0 0 1/1*?*",但它仍然会在应用程序启动时执行一次
如何在应用程序启动时停止第一次执行?
这是作业上下文文件:
<batch:job id="exceptionLogJob">
<batch:step id="exceptionLogReadWriteStep">
<batch:tasklet >
<batch:chunk reader="exceptionLogReader" writer="exceptionLogWriter"
commit-interval="1000" />
</batch:tasklet>
</batch:step>
</batch:job>
<!-- ======================================================= -->
<!-- READER -->
<!-- ======================================================= -->
<bean id="exceptionLogReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="SELECT a.*,a.rowid FROM SF_EXCEPTION_LOG a WHERE DATETIME > SYSDATE - 1" />
<property name="rowMapper" ref="ExceptionLogRowMapper" />
</bean>
<!-- ======================================================= -->
<!-- Writer -->
<!-- ======================================================= -->
<bean id="exceptionLogWriter"
class="com.mobily.sf.batchprocessor.exceptionlog.ExceptionLogWriter" />
<bean id="jobDetailExceptionLog" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.sf.batchprocessor.commons.JobLauncherDetails" /> …Run Code Online (Sandbox Code Playgroud) quartz-scheduler ×10
java ×7
spring ×3
cron ×2
crontab ×1
enterprise ×1
python ×1
scheduling ×1
spring-batch ×1