从Quartz Task调用服务

问题描述 投票:1回答:1

我正在使用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;
    }
...
}
c# .net quartz-scheduler quartz.net
1个回答
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了解更多详情。

© www.soinside.com 2019 - 2024. All rights reserved.