Java 石英:触发多个作业

Java 石英:触发多个作业,java,quartz-scheduler,Java,Quartz Scheduler,在Quarts中,我可以使用一个触发器来调度多个作业,以便并行执行所有作业。最好的方法是什么 例如,每小时并行执行作业j1、j2、…、jn。假设两个作业之间没有依赖关系。您可以构建一个触发其他作业的触发作业。通过使用JobMap属性使其可配置,您可以重用该类来触发任意一组作业(也可以自己执行第一个作业)。您不能将多个作业与同一个触发器关联(给定作业可以有多个触发器,但反之亦然),但可以设置多个相同的触发器,一份工作一份 为了让它们并行运行,您需要确保Quartz的线程池具有足够的容量。有关线程池

在Quarts中,我可以使用一个触发器来调度多个作业,以便并行执行所有作业。最好的方法是什么


例如,每小时并行执行作业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上下文)
{
控制台写入线(“作业二”);
}
}

理想情况下,您不应该做这样的事情,因为这不是安排作业的正确方式