Кварц: запуск нескольких заданий - PullRequest
5 голосов
/ 05 мая 2010

В Quarts можно ли использовать один триггер для планирования нескольких заданий, чтобы все задания выполнялись параллельно.Каков наилучший способ сделать это.

Например, каждый час выполняйте задания j1, j2, ..., jn параллельно.Предполагая, что между заданиями нет зависимости.

Ответы [ 3 ]

8 голосов
/ 06 мая 2010

Нельзя связать несколько заданий с одним и тем же триггером (заданное задание может иметь несколько триггеров, но не наоборот), но вы можете настроить несколько одинаковых триггеров, по одному для каждого задания.

Чтобы они работали параллельно, вам нужно убедиться, что у пула потоков Quartz достаточно ресурсов для этого. См. здесь для параметров конфигурации для пула потоков.

1 голос
/ 05 мая 2010

Вы можете создать триггерное задание, которое запускает другие задания.Сделайте его настраиваемым, используя свойства JobMap, и вы сможете повторно использовать класс для запуска произвольного набора заданий (и, возможно, для выполнения первого для себя).

0 голосов
/ 22 июля 2015

Я закончил тем, что сделал функцию помощи 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...