从Quartz Task调用服务

时间:2018-03-14 16:29:35

标签: c# .net quartz-scheduler quartz.net

我正在使用Quartz.NET。 https://www.quartz-scheduler.net/

我可以通过myTask调用其他服务吗?我需要我的上下文,因为我需要更新我的数据库。我不知道如何捕捉上下文。

我发现有关Quartz库的所有示例,它们非常简单,就像在控制台中打印一样

public class MyTask : IJob
{
    private IRegion _region;

    public Task Execute(IJobExecutionContext context)
    {
        switch (context.JobDetail.Key.ToString())
        {
            case "app.chargeMDM":
                _region.CalculateData(0);
                Console.WriteLine(string.Format("[{0}]: Hora de comer!", DateTime.Now));
                break;

            case "app.5min":
                Console.WriteLine(string.Format("[{0}]: La app esta UP!.", DateTime.Now));
                break;
        }
        return null;
    }
}

例如,这是我的服务

public class RegionService : IRegion
{
    PanelANRContext _context;

    public RegionService(PanelANRContext context)
    {
        _context = context;
    }
...
}

1 个答案:

答案 0 :(得分:0)

  

我需要我的上下文,因为我需要更新我的数据库。和我   不知道如何捕捉背景。

您可以将对象传递到IJobExecutionContext context。然后使用JobDataMap检索它们。

例如: 使用job

创建JobData
JobDetail job = newJob(DumbJob.class)
      .withIdentity("myJob", "group1") // name "myJob", group "group1"
      .usingJobData("jobSays", "Hello World!")
      .usingJobData("myFloatValue", 3.141f)
      .build();

检索:

public class DumbJob implements Job {

    public DumbJob() {
    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException
    {
      JobKey key = context.getJobDetail().getKey();

      JobDataMap dataMap = context.getJobDetail().getJobDataMap();

      String jobSays = dataMap.getString("jobSays");
      float myFloatValue = dataMap.getFloat("myFloatValue");

      System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
    }
  }

查看此Tutorial - Lesson 3: More About Jobs and Job Details了解更多详情。