不知道下面的表述是否正确:
<property name="cronExpression" value="0 0 12 2 * MON-FRI ?"/>
Run Code Online (Sandbox Code Playgroud)
我尝试将我的触发器配置为每个月的第二天触发,无论年份如何,中午,一周中的某一天必须在周一和周五之间。
如果有人可以帮助我,我将不胜感激。提前致谢。
目前我有一个代码,它有一个java main方法,并且它的执行需要很少的命令行参数.我正在将这个作为一个石英工作,我想把这个论点传递给这个工作.
有没有办法可以做到?我对JobDataMap进行了一些分析,但我不确定是否可以将它用于此目的.
此外,这项工作将是一次性工作,需要暂停并继续用户的一些操作.我应该为石英这种情况扩展或使用什么样的工作?
非常感谢你的时间.
干杯,阿比
我有一个使用 Quartz 库的带有预定作业的 Web 应用程序。最近我遇到了一个工作似乎没有被解雇的情况。我做了一些阅读,显然如果作业抛出异常,Quartz 调度程序将尝试再次执行该作业。这是真的?
无论如何,我基于上述陈述是正确的假设进行了一些故障排除。所以假设我有以下代码片段:
try {
method.invoke(object, params);
}
catch (ExceptionA ea) {
ea.printStackTrace();
}
catch (ExceptionB eb) {
eb.printStackTrace();
}
// and so on so forth, catching a bunch of specific Exceptions
Run Code Online (Sandbox Code Playgroud)
这里要注意的重点是Exception 本身没有被捕获。
因此,假设被调用的方法引发了未处理的异常。
public void methodBeingInvoked() throws UnhandledException {
Run Code Online (Sandbox Code Playgroud)
这里会发生什么?
不同的 Quartz TriggerState 枚举状态代表什么以及它们如何设置?
我有一个用于运行预定作业的 Spring 3.1 Quartz 2.0.1 实用程序。我的工作只重复固定的次数。我希望我的 TriggerState 在所有工作完成后进入 COMPLETE。但是,我看到它从 NORMAL 变为 NONE,而我从未看到 COMPLETE。我找不到太多关于 TriggerState 行为的文档。
相关Java代码:
SchedulerFactory schedFactory = new StdSchedulerFactory();
Scheduler scheduler = = schedFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
while (System.in.available() == 0) {
// Get trigger state
TriggerState triggerState = scheduler.getTriggerState(triggerKey);
if ((triggerState == TriggerState.COMPLETE)) {
break;
}
// Sleep for 100 msec
Thread.sleep(SCHEDULER_SLEEP_TIME);
}
Run Code Online (Sandbox Code Playgroud)
Spring xml 中的作业配置:
<bean id="mockJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass"
value="mypackage.MockJob"/>
</bean>
<bean id="simpleMockJobTrigger"
class="org.quartz.impl.triggers.SimpleTriggerImpl" >
<property name="name" value="simpleMockJobTrigger" />
<!-- run …Run Code Online (Sandbox Code Playgroud) 我正在为 Quartz.NET 开发一个基本的 Web 客户端,它支持在运行时修改作业的 JobDataMap。
我的工作装饰有以下属性,我认为这些属性是使工作有状态所必需的:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class SampleTenantJob : IJob { ... }
Run Code Online (Sandbox Code Playgroud)
在运行时,我执行以下代码但 JobDataMap 没有持久化:
public void UpdateJobProperties(string jobName, string groupName, IDictionary<string, object> properties)
{
IJobDetail job;
if (!TryGetJob(jobName, groupName, out job))
return;
foreach (var property in properties)
{
if (job.JobDataMap.ContainsKey(property.Key) && property.Value != null)
{
job.JobDataMap.Put(property.Key, property.Value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我最初认为这是因为我正在使用XMLSchedulingDataProcessorPluginfor 作业,但我已经尝试了内存(RAMStore)AdoJobStore并且仍然无法保留JobDataMap远程客户端所做的更改。
Quartz JobDataMap有以下问题。我希望当使用简单的 Quartz Job并将非原始对象(例如StringBuilder 的实例)传递到JobDateMap 时,应该始终使用我放置的不同对象副本调用方法execute(从我的工作)。不幸的是,我总是得到我放入JobDateMap的对象实例(就像它是一个 StatefulJob)。
在下面的示例中,我希望在每次调用中都得到一个 '*',而每次我都会再得到一个 '*'。
public class MyJob implements Job {
public static void main(String[] args) throws SchedulerException {
SchedulerFactory schedFact = new StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
JobDetail jobDetail = new JobDetail("job", Scheduler.DEFAULT_GROUP, MyJob.class);
jobDetail.getJobDataMap().put("param", new StringBuilder());
Trigger trigger = TriggerUtils.makeImmediateTrigger("trigger", 10, 100);
trigger.setGroup(Scheduler.DEFAULT_GROUP);
sched.scheduleJob(jobDetail, trigger);
sched.start();
try {
Thread.sleep(1000L);
} catch (Exception e) {}
sched.shutdown(true);
}
@Override
public void execute(JobExecutionContext context) …Run Code Online (Sandbox Code Playgroud) 我每天使用Quartz.NET在特定时间执行任务,这是我的代码:
public class TestSchedule : ISchedule
{
public void Run()
{
DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second);
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1")
.StartAt(startTime)
.WithDailyTimeIntervalSchedule(x => x.OnEveryDay().StartingDailyAt(new TimeOfDay(7, 0)).WithRepeatCount(0))
.Build();
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sc = sf.GetScheduler();
sc.ScheduleJob(job, trigger);
sc.Start();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码正在运行,但是问题是现在只能运行一次(似乎是因为WithRepeatCount(0)),怎么能说每天7点运行?
PS:我不想CronTrigger这样做。
我目前正在使用JDBC作业存储在负载平衡环境中设置Quartz,我想知道每个人如何管理石英作业存储DB.
对我来说,Quartz(2.2.0)将作为版本化应用程序的一部分进行部署,同时一台服务器上可能存在多个版本.我使用符号XXScheduler_v1来确保多个调度程序一起使用.我的代码工作正常,石英表适当地填充了触发器/作业/等.
我注意到的一件事是,在取消部署应用程序时似乎没有发生数据库清理.我的意思是,即使不再有调度程序处于活动状态,Job/Scheduler数据似乎仍保留在quartz数据库中.
这是不太理想的,我可以想象,我的模型数据库将变得比它随时间变化所需的更大.我错过了如何连接一些清理过程吗?或石英希望我们手动进行数据库清理?
干杯!
我正在尝试使用石英构建器来创建 cron 触发器并尝试提供 startnow 指令。但是触发器没有启动,而是在完成给定的时间间隔后才启动。有人可以帮助我在启动服务器期间启动触发器吗?我使用的是普通石英,没有弹簧。
Trigger trigger = newTrigger()
.withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP)
.withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing())
.startNow()
.build();
Run Code Online (Sandbox Code Playgroud) 我在服务中有一项业务,我不知道线程需要多长时间才能完成其工作,因此我无法设置确切的时间间隔。或者以另一种方式,我想知道在前一个线程完成工作后如何设置线程启动。