是否可以添加带有触发器的作业来运行Quartz.NET调度程序实例而无需重新启动服务器?
我有我的Quartz调度程序的当前代码:
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
// Job1
var Job1 = JobBuilder.Create<Test1>().WithIdentity("job1", "group1").Build();
// Job2
var Job2 = JobBuilder.Create<Test2>().WithIdentity("job2", "group2").Build();
// Triggers
ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().Build()
ITrigger trigger2 = TriggerBuilder.Create().WithIdentity("trigger2", "group2").StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(4)).Build();
// JobKeys
JobKey jobKey1 = new JobKey("Job1", "group1");
JobKey jobKey2 = new JobKey("Job2", "group2");
// Chain jobs
JobChainingJobListener chain = new JobChainingJobListener("testChain");
chain.AddJobChainLink(jobKey1, jobKey2);
scheduler.ScheduleJob(Job1, trigger1);
scheduler.AddJob(Job2, true);
// Global listener here. I am not sure what I have is correct.
scheduler.ListenerManager.AddJobListener(chain, GroupMatcher<JobKey>.AnyGroup());`
scheduler.Start();
Run Code Online (Sandbox Code Playgroud)
(为了澄清,这些工作只是打印到控制台.)
在Quartz网站上,我发现这将添加一个对所有作业感兴趣的JobListener:scheduler.ListenerManager.AddJobListener(chain, …
鉴于我们有一份银行清单,每家银行都有多个办事处,
public class Bank {
private String name;
private List<String> branches;
public String getName(){
return name;
}
public List<String> getBranches(){
return branches;
}
}
Run Code Online (Sandbox Code Playgroud)
例如:
Bank "Mizuho": branches=["London", "New York"]
Bank "Goldman": branches = ["London", "Toronto"]
Run Code Online (Sandbox Code Playgroud)
根据银行名单,我会得到每个城市的银行代表地图.在上面的例子中,我需要一个结果
Map["London"] == ["Mizuho", "Goldman"]
Map["New York"] == ["Mizuho"]
Map["Toronto"] == ["Goldman"]
Run Code Online (Sandbox Code Playgroud)
如何使用Java 8 API实现该结果?使用pre-Java8很容易,但很冗长.谢谢.
ITrigger trigger = TriggerBuilder.Create()
.StartAt(DateTime.Today.AddMinutes(1))
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.WithRepeatCount(0)
)
.Build();
Run Code Online (Sandbox Code Playgroud)
我想要在每个月的第一天执行的触发器
我正在使用石英 2.5.0.0
我有以下代码来运行我想要的任何工作。我所有的工作都放在一个文件夹中,因为我只是把它放在那里。
var scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
var t = new ImportingLib.Importer();
t.DoImport();
foreach (var component in t.CallAllComponents())
{
var job = JobBuilder.Create(component)
.WithIdentity(component.Name)
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity($"{component.Name}Trigger")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.ForJob(component.Name)
.Build();
scheduler.ScheduleJob(job, trigger);
}
Run Code Online (Sandbox Code Playgroud)
我想让这个工作每 10 秒运行一次,但我必须等待它自己结束,在此之后,再次启动同一个工作。一种知道胎面何时结束应该如何工作的方法,但我没有找到如何做到这一点。知道如何让它工作吗?
我对Java 8 Optionals有疑问.
以下代码给出了编译错误:
Integer number = Optional.ofNullable(new Integer(10));
Run Code Online (Sandbox Code Playgroud)
但是,当我们做以下它不,我不明白这是怎么工作:
Integer number = Optional.ofNullable(new Integer(10)).orElse(10);
Run Code Online (Sandbox Code Playgroud)
如果我们查看文档Optional.ofNullable()
,它会返回一个类型的对象static <T> Optional<T> ofNullable(T value)
,表示它是内部类型转换,但文档说它的返回类型是Optional
.
我得到的.orElse
方法返回类型T
,如果它进入orElse
条件,它将工作正常,即如果传入的对象是null
,但如果它不是null它是如何对它进行类型转换?
当我尝试暂停我的工作时,我想更新它的数据图,以便可以将“暂停”状态保存在那里。我的代码如下所示:
public void Pause(JobKey key)
{
var job = Scheduler.GetJobDetail(key);
if(job == null) return;
job.JobDataMap.Put("Status", "Paused");
Scheduler.PauseJob(job.Key);
}
Run Code Online (Sandbox Code Playgroud)
作业按预期暂停,但其状态未更新,我不明白为什么。可能是什么原因?还有其他方法可以更新JobDatamap
返回的作业吗Scheduler.GetJobDetail(key)
?
我想要一个每45分钟触发一次的cron表达式。
根据文档,我创建了此0 0/45 * * * ?
表达式。
但是会以12:00、12:45、13:00、13:45、14:00这样的模式触发。
但是我期望和想要的是在12:00、12:45、13:30、14:15被解雇。
我想念什么?
quartz.net ×6
c# ×4
java ×2
java-8 ×2
c#-4.0 ×1
cron ×1
crontrigger ×1
java-stream ×1
optional ×1
scheduler ×1
task ×1