Java 石英:触发多个作业
在Quarts中,我可以使用一个触发器来调度多个作业,以便并行执行所有作业。最好的方法是什么Java 石英:触发多个作业,java,quartz-scheduler,Java,Quartz Scheduler,在Quarts中,我可以使用一个触发器来调度多个作业,以便并行执行所有作业。最好的方法是什么 例如,每小时并行执行作业j1、j2、…、jn。假设两个作业之间没有依赖关系。您可以构建一个触发其他作业的触发作业。通过使用JobMap属性使其可配置,您可以重用该类来触发任意一组作业(也可以自己执行第一个作业)。您不能将多个作业与同一个触发器关联(给定作业可以有多个触发器,但反之亦然),但可以设置多个相同的触发器,一份工作一份 为了让它们并行运行,您需要确保Quartz的线程池具有足够的容量。有关线程池
例如,每小时并行执行作业j1、j2、…、jn。假设两个作业之间没有依赖关系。您可以构建一个触发其他作业的触发作业。通过使用JobMap属性使其可配置,您可以重用该类来触发任意一组作业(也可以自己执行第一个作业)。您不能将多个作业与同一个触发器关联(给定作业可以有多个触发器,但反之亦然),但可以设置多个相同的触发器,一份工作一份
为了让它们并行运行,您需要确保Quartz的线程池具有足够的容量。有关线程池的配置选项,请参阅。我最后制作了一个帮助函数GetTrigger
class Program
{
static void Main(string[] args)
{
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };
IJobDetail jobOne = JobBuilder.Create<JobOne>()
.WithIdentity(typeof(JobOne).Name)
.Build();
IJobDetail jobTwo = JobBuilder.Create<JobTwo>()
.WithIdentity(typeof(JobTwo).Name)
.Build();
var jobOneTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobOne);
var jobTwoTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobTwo);
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.ScheduleJob(jobOne, jobOneTrigger);
scheduler.ScheduleJob(jobTwo, jobTwoTrigger);
scheduler.Start();
}
private static ITrigger GetTrigger(TimeSpan executionTimeSpan, IJobDetail forJob)
{
return TriggerBuilder.Create()
.WithIdentity(forJob.JobType.Name+"Trigger")
.StartNow()
.WithSimpleSchedule(x => x
.WithInterval(executionTimeSpan)
.RepeatForever())
.ForJob(forJob.JobType.Name)
.Build();
}
}
public class JobOne : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("JobOne");
}
}
public class JobTwo : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("JobTwo");
}
}
类程序
{
静态void Main(字符串[]参数)
{
Common.Logging.LogManager.Adapter=new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter{Level=Common.Logging.LogLevel.Info};
IJobDetail jobOne=JobBuilder.Create()
.WithIdentity(typeof(JobOne).Name)
.Build();
IJobDetail jobTwo=JobBuilder.Create()
.WithIdentity(类型为(JobTwo).Name)
.Build();
var jobOneTrigger=GetTrigger(新的时间跨度(0,0,5),jobOne);
var jobtowtrigger=GetTrigger(新的时间跨度(0,0,5),jobtow2);
isScheduler scheduler=StdSchedulerFactory.GetDefaultScheduler();
ScheduleJob(jobOne,JobOneRigger);
ScheduleJob(jobTwo,jobTwoTrigger);
scheduler.Start();
}
专用静态ITrigger GetTrigger(TimeSpan executionTimeSpan,IJobDetail for Job)
{
返回TriggerBuilder.Create()
.WithIdentity(forJob.JobType.Name+触发器)
.StartNow()
.使用SimpleSchedule(x=>x
.WithInterval(executionTimeSpan)
.RepeatForever())
.ForJob(ForJob.JobType.Name)
.Build();
}
}
公务舱一号:IJob
{
public void Execute(IJobExecutionContext上下文)
{
控制台。WriteLine(“JobOne”);
}
}
公务舱工作二:IJob
{
public void Execute(IJobExecutionContext上下文)
{
控制台写入线(“作业二”);
}
}
理想情况下,您不应该做这样的事情,因为这不是安排作业的正确方式