【问题标题】:Execute multiple Stored Procedures with Quartz.NET使用 Quartz.NET 执行多个存储过程
【发布时间】:2013-03-11 14:55:39
【问题描述】:

在阅读了所有教程之后,我仍然试图围绕 Quartz.NET 展开思考,这些教程看起来非常特定于代码,而不是专注于实现。这就是我想要做的。我有 20 个 SQL 存储过程,它们可以执行各种操作,例如查询日志表、向其他进程重新提交数据等。我希望这些 SP 每天定期运行。所以这对于 Quartz.NET 来说似乎很自然。我计划创建一个 Windows Svc,它实现 Quartz.NET 并在与 Quartz 程序集相同的文件夹中的程序集中包含作业。

我认为,实现这一点的一个不好的方法是为每个 SP 编写一个作业类,并为每个 SP 关联一个单独的触发器。作业类将简单地执行一个特定的 SP,其名称在类中被硬编码。这是不好的方式。

但对于我的一生,我无法弄清楚好方法是什么。显然,拥有一个只执行通用“按名称执行 SP”的作业类,其中名称来自一个简单的 SQL 表,这似乎是要走的路,但我将如何获得与不同 SP 相关联的不同触发器,以及如何Quartz 知道将所有 20 个 SP 加载到单独的线程上吗?

Quartz 怎么知道要为其中一个 SP 拾取已更改的触发器?这是否必须是 Win Svc 上的启动/停止循环才能重新加载作业和触发器,还是我也必须手动编写某种“重新加载”代码?

有什么想法吗?我误解了石英是什么吗?措辞使它听起来像是一个企业调度程序,一个系统,一个你安装的东西。 OTOH 的所有文档使它看起来只是一堆类,您可以将它们拼接在一起以创建您的 OWN 调度程序或调度系统,这与 MS 在 .NET 中提供的用于创建执行 FTP 的应用程序的类没有什么不同。可能是我期望太高了?

【问题讨论】:

  • //措辞使它听起来像是一个企业调度程序,一个系统,一个你安装的东西。 OTOH 的所有文档使它看起来只是一堆你缝合在一起的类//这正是我使用它的地方........

标签: sql-server quartz.net


【解决方案1】:

满足您的要求的一种非常简单的方法可能是:

从示例服务器开始

以 Quartz.NET 发行版的服务器为起点,您有一个现成的 Windows 服务模板,该模板利用 TopShelf 轻松安装

使用带有变更检测的 XML 配置

quartz.config 文件包含实际配置,您可以看到作业和触发器是从 XML 文件quartz_jobs.xml 中读取的。

您需要添加 quartz.plugin.xml.scanInterval = 10 以观察变化(每十秒一次)

使用触发器作业数据映射来参数化作业

如果 SQL 执行与您建议的一样简单,您可以为每个触发器使用相同的作业类。只需将所需的配置添加到 XML 中的触发器定义(此处示例每十秒运行一次,添加任意数量的触发器):

<trigger>
  <simple>
    <name>sqlTrigger1</name>
    <job-name>genericSqlJob</job-name>
    <job-group>sqlJobs</job-group>
    <job-data-map>
      <entry>
        <key>sql_to_run</key>
        <value>select 1</value>
      </entry>
    </job-data-map>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <repeat-count>-1</repeat-count>
    <repeat-interval>10000</repeat-interval>
  </simple>
</trigger>

只需使用quartz_jobs.xml 作为基础并进行必要的更改。

在工作中使用配置

您可以从包含作业和触发器参数的上下文的 MergedJobDataMap 访问作业中的配置,后者会覆盖前者。

public void Execute(IJobExecutionContext context)
{
    string sqlToRun = context.MergedJobDataMap.GetString("sql_to_run");
    SqlTemplate.ExecuteSql(sqlToRun);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2013-08-07
    • 2016-12-13
    相关资源
    最近更新 更多