当前位置: 首页 > 知识库问答 >
问题:

quartz.net:触发器不会被触发,也不会被记录

公西国发
2023-03-14

正如标题所说,我根本无法让Quartz.net工作。我从NuGet获得了最新版本的Quartz.net(2.2.1)、Common.Logging(2.1.2)、Common.Logging.NLog(2.0.0)和NLog(2.1.0)。触发器没有被触发,而且石英绝对没有记录任何东西。我猜我搞砸了配置。

我的应用程序配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    ...

    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" />

    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>

  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
        <arg key="configType" value="FILE" />
        <arg key="configFile" value="~/NLog.config" />
      </factoryAdapter>
    </logging>
  </common>

  <quartz>
    <add key="quartz.scheduler.instanceName" value="ServerScheduler" />

    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="2" />

    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  </quartz>

...

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
...
      <dependentAssembly>
        <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.2.0" newVersion="2.1.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

有一个作业和一个触发器与之相关:

{Trigger 'DEFAULT.DailyYahooUpdateTrigger':  triggerClass: 'Quartz.Impl.Triggers.CronTriggerImpl calendar: '' misfireInstruction: 0 nextFireTime: 01/29/2014 18:38:00 +00:00}
    [Quartz.Impl.Triggers.CronTriggerImpl]: {Trigger 'DEFAULT.DailyYahooUpdateTrigger':  triggerClass: 'Quartz.Impl.Triggers.CronTriggerImpl calendar: '' misfireInstruction: 0 nextFireTime: 01/29/2014 18:38:00 +00:00}
    CalendarName: null
    Description: null
    EndTimeUtc: null
    FinalFireTimeUtc: null
    HasMillisecondPrecision: false
    JobDataMap: {Quartz.JobDataMap}
    JobKey: {DEFAULT.DailyYahooUpdate}
    Key: {DEFAULT.DailyYahooUpdateTrigger}
    MisfireInstruction: 0
    Priority: 5
    StartTimeUtc: {29/1/2014 18:37:44 +00:00}

调度程序将启动,作业和触发器将正确添加,日志记录将正常工作。nextFireTime来了又去,什么也没发生。

触发器创建代码:

    ITrigger trigger = TriggerBuilder
        .Create()
        .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(jobDetails.Time.Hours, jobDetails.Time.Minutes))
        .StartNow()
        .WithIdentity(jobDetails.Name + "Trigger")
        .Build();

共有1个答案

聂昱
2023-03-14

根据你的信息,它应该起作用;它应该每天运行一次。

确保已安装通用日志记录NLog20]:

Install-Package Common.Logging.NLog20

并更改此节:

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">
        <arg key="configType" value="FILE" />
        <arg key="configFile" value="~/NLog.config" />
      </factoryAdapter>
    </logging>
  </common>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
private static void GetNext10FireTimes(ITrigger trigger)
{
    Console.WriteLine("List of next 10 schedules: ");

    var dt = trigger.GetNextFireTimeUtc();

    for (int i = 0; i < 10; i++)
    {
    if (dt == null)
        break;

    Console.WriteLine(dt.Value.ToLocalTime());

    dt = trigger.GetFireTimeAfter(dt);
    }
}

一个完整的工作示例可以在这里找到(quartznetdailyathourandminute.zip)。

 类似资料:
  • 问题内容: 我试图设置一个监听器来确定何时按下输入按钮,但是根本没有触发。我在装有Android 4.2.2的LG Nexus 4上进行了测试。可以在具有Android 2.3的Amazon Kindle Fire上使用,并且无处可用!我也无法为按钮设置文本。这是代码: 我究竟做错了什么?我怎样才能解决这个问题? 问题答案: 您可以使用TextWatcher。

  • 问题内容: 我正在尝试在应用程序中使用AngularJS,并在某种程度上取得了成功。 我能够获取数据并将其显示给用户。我有一个按钮,我想通过该按钮发布DELETE请求。下面是我的代码。 这是获取信息并将其显示给用户的功能。 数据已获取并正确显示。 但是,单击删除按钮后,不会触发其中的代码。在GoogleChrome浏览器的开发人员工具中,我可以看到为代码生成了有效值,但未触发代码。从我尝试去掉花括

  • 本文向大家介绍render在什么时候会被触发?相关面试题,主要包含被问及render在什么时候会被触发?时的应答技巧和注意事项,需要的朋友参考一下 在 React 中,只要执行了 setState 方法,就一定会触发 render 函数执行; 组件的 props 改变了,不一定触发 render 函数的执行,除非 props 的值来自于父组件或者祖先组件的 state

  • 假设我有一个非常简单的模型,我想验证它的标题是否为空白。 在服务层上,我执行如下验证(使用Hibernate验证器): 我的资源是: null 编辑 我忘了提到,将方法范围从private更改为public可以使验证工作。

  • 我使用next.js提供的with-redux示例(https://github.com/zeit/next.js/tree/canary/examples/with-redux)在next.js中设置了React-Redux。此外,我还设置了thunk,因为将来大多数redux调用都将是异步的(现在只是初始状态,将被更改)。 当我现在尝试使用thunk调度函数时,还原器从未被触发。 现在我已经到

  • 我有这个脚本: HTML中的用法: 由于某些原因,它的工作,如果页面重新加载一半,但不,它没有开火,在它工作之前,所以我不知道发生了什么。我在wordpress网站上使用这个。