我对使用 Quartz 很陌生,我有一个关于触发器的问题。是否可以根据文件存在触发?我想让 Quartz 运行一项作业,直到找到某个文件,然后停止运行该作业,也许会继续进行另一个作业。
例如,我想做这样的事情:
(1) Job1 每 60 秒检查一次给定目录中是否存在 File.txt。
(2)如果找到File.txt,则触发Job2启动。Job1 停止检查文件是否存在。
现在,我有:
// Job definitions
var Job1 = JobBuilder.Create<TestEmail>().WithIdentity("job1", "group1").Build();
var Job2 = JobBuilder.Create<TestFileTrigger>().WithIdentity("job2", "group2").Build();
// Triggers
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1").StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("trigger2", "group2").StartNow()
.Build();
// Schedule jobs
scheduler.ScheduleJob(Job1, trigger1);
if (TestFileTrigger.fileExistence == true)
{
scheduler.ScheduleJob(Job2, trigger2);
}
Run Code Online (Sandbox Code Playgroud)
但似乎 Job2 永远不会启动。
TestEmail 和 TestFileTrigger 目前只是简单地打印到控制台。布尔 TestFileTrigger.fileExistence 来自检查文件是否存在于给定位置(它确实存在)。
编辑: TestFileTrigger.fileExistence 是一个布尔值。如果有帮助,添加了 Job1/Job2 的定义。
编辑:我发现如果我放在Thread.Sleep(TimeSpan.FromSeconds(x));if 语句之前,如果满足条件,if 语句就会运行。(其中 x …
我有我的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, …
我有一个包含弹出页面的模板。我循环遍历从视图中获取的列表中的所有值,并希望在弹出窗口中包含列表中每个元素的信息。
第1页.html:
{% include "popup.html" %}
...
{% for element in someList %}
<div class="col s3 some-button"><a onclick="$(showPopup('popup'));">More Info</a></div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
showPopup 是一个 Javascript 函数,用于显示弹出窗口。
在 popup.html 中,我引用了element上面的 for 循环:
弹出窗口.html
...
{{ element }}
...
Run Code Online (Sandbox Code Playgroud)
但是 popup.html 模板似乎无法element从 for 循环中找到 ,因为没有显示任何内容。有没有办法让 popup.html 能够引用element?