QuartzNet


  QuartzNet 是一个强大、开源、轻量的作业调度框架。Fireasy 提供了 QuartzNet 对 任务调度管理器 的实现。

  修改配置文件如下:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="taskSchedulers" type="Fireasy.Common.Tasks.Configuration.TaskScheduleConfigurationSectionHandler, Fireasy.Common" />
    </sectionGroup>
  </configSections>
  <fireasy>
    <taskSchedulers default="quartz">
      <scheduler name="quartz" type="Fireasy.QuartzNet.TaskScheduler, Fireasy.QuartzNet">
        <jobs>
          <job type="demo.TaskJob1, demo"
            startTime="2020-01-01"
            endTime="2022-01-01"
            cron="0 */1 * * * ?">
              <arguments><![CDATA[{ "A1": 1, "A2": "344" }]]></arguments>
            </job>
        </jobs>
      </scheduler>
    </taskSchedulers>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "taskSchedulers": {
      "default": "quartz",
      "settings": {
        "quartz": {
          "type": "Fireasy.QuartzNet.TaskScheduler, Fireasy.QuartzNet",
          "jobs": [
            {
              "type": "demo.TaskJob1, demo",
              "startTime": "2020-01-01",
              "endTime": "2022-01-01",
              "cron": "0 */1 * * * ?",
              "arguments": "{ \"A1\": 1, \"A2\": \"344\" }"
            }
          ]
        }
      }
    }
  }
}

  参数的说明如下:

  • startTime 任务开始的时间。
  • startTime 任务结束的时间。
  • cron cron 表达式,请查阅相关资料。
  • arguments 初始化参数,一个 Json 字符串,可反序列化为 Dictionary<string, object>

  在 .Net Core 应用中可以使用扩展方法 AddQuartzScheduler 切换到 QuzrtzNet 任务调度,如下所示:

namespace demo
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddFireasy().AddQuartzScheduler(s =>
            {
                s.Add(t => t.CronExpression = "0 */1 * * * ?",
                    (sp) => Console.WriteLine("yes"));
                s.AddAsync(t => t.CronExpression = "0 */1 * * * ?",
                    (sp, cancel) => Task.Run(() => Console.WriteLine("async yes")));
            });
        }
    }
}

💡 小提示

  使用 AddQuartzScheduler 方法后,配置中的 jobs 仍然有效。