Подтвердить что ты не робот

Как отправить аргумент классу в Quartz.Net

Я использую Quartz.Net(версия 2) для запуска метода в классе каждый день в 8:00 и 20:00 (IntervalInHours = 12)

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

Может ли кто-нибудь помочь мне, как я могу использовать аргументы при использовании Quartz.Net?

4b9b3361

Ответ 1

Вы можете использовать JobDataMap

jobDetail.JobDataMap["jobSays"] = "Hello World!";
jobDetail.JobDataMap["myFloatValue"] =  3.141f;
jobDetail.JobDataMap["myStateData"] = new ArrayList(); 

public class DumbJob : IJob
{
    public void Execute(JobExecutionContext context)
    {
        string instName = context.JobDetail.Name;
        string instGroup = context.JobDetail.Group;

        JobDataMap dataMap = context.JobDetail.JobDataMap;

        string jobSays = dataMap.GetString("jobSays");
        float myFloatValue = dataMap.GetFloat("myFloatValue");
        ArrayList state = (ArrayList) dataMap["myStateData"];
        state.Add(DateTime.UtcNow);

        Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
    }
} 

Ответ 3

Аннотация

Позвольте мне продлить бит @arsen-mkrtchyan сообщение со значительным примечанием, которое может избежать болезненной поддержки Quartz code в производстве:

Проблема (для стойкости JobStore)

Помните о версии JobDataMap, если вы используете постоянную JobStore, например. AdoJobStore.

Сводка (TL; DR)

  • Осторожно подумайте о создании/редактировании JobData, иначе это приведет к проблемам при запуске будущих заданий.
  • Включить параметр конфигурации quartz.jobStore.useProperties как официальная документация рекомендует, чтобы свести к минимуму проблемы с версией. Позднее используйте JobDataMap.PutAsString().

Подробнее

Кроме того, в документации также указано, что это не так подчеркнуто, но может привести к большой проблеме обслуживания, если, например, вы удаляете какой-либо параметр в следующей версии вашего приложения:

Если вы используете постоянную JobStore (обсуждаемую в разделе JobStore этого урока), вам следует позаботиться о том, чтобы вы определили, что вы размещаете в JobDataMap, потому что объект в нем будет сериализован, и поэтому они становятся склонными к классу, проблемы с версией.

Также есть ссылка на настройку JobStore, упомянутую в соответствующий документ:

Параметр конфигурации quartz.jobStore.useProperties может быть установлен в значение "true" (по умолчанию false), чтобы проинструктировать AdoJobStore, что все значения в JobDataMaps будут строками и поэтому могут быть сохранены в виде пар имя-значение, вместо хранения более сложных объектов в их сериализованной форме в столбце BLOB. Это намного безопаснее в долгосрочной перспективе, так как вы избегаете проблем с версией класса, которые существуют с сериализацией ваших классов, отличных от String, в BLOB.