Quartz .net Execute 方法不执行

iefus 2016-09-06 05:54:39
新建 framework 4.5 控制台程序,NuGet 安装Quartz 2.4.1, Topshelf 4.0.1, log4net 2.0.5

项目中加入 Quartz 2.4.1的sample cs类: Program.cs,SampleJob.cs,quartz_jobs.xml等

运行之后,控制台一直停留在下面,没有调用job。为什么啊


Configuration Result:
[Success] Name QuartzServer, [Success] DisplayName Quartz Server, [Success] Desc
ription Quartz Job Scheduling Server, [Success] ServiceName QuartzServer
Topshelf v4.0.0.0, .NET Framework v4.0.30319.42000
The QuartzServer service is now running, press Control+C to exit.


配置文件和job类


<?xml version="1.0" encoding="UTF-8"?>

<!-- This file contains job definitions in schema version 2.0 format -->

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">

<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>

<schedule>

<job>
<name>mailJob</name>
<group>mailGroup</group>
<description>Mail job for Quartz Server</description>
<job-type>Quartz.Server.MailJob, Quartz.Server</job-type>
<durable>true</durable>
<recover>false</recover>
</job>

<trigger>
<simple>
<name>mailTrigger</name>
<group>mailGroup</group>
<description>Simple trigger to simply fire sample job</description>
<job-name>mailJob</job-name>
<job-group>mailGroup</job-group>
<misfire-instruction>SmartPolicy</misfire-instruction>
<repeat-count>-1</repeat-count>
<repeat-interval>10000</repeat-interval>
</simple>
</trigger>

<job>
<name>sampleJob</name>
<group>sampleGroup</group>
<description>Sample job for Quartz Server</description>
<job-type>Quartz.Server.SampleJob, Quartz.Server</job-type>
<durable>true</durable>
<recover>false</recover>
</job>

<trigger>
<simple>
<name>sampleSimpleTrigger</name>
<group>sampleSimpleGroup</group>
<description>Simple trigger to simply fire sample job</description>
<job-name>sampleJob</job-name>
<job-group>sampleGroup</job-group>
<misfire-instruction>SmartPolicy</misfire-instruction>
<repeat-count>-1</repeat-count>
<repeat-interval>10000</repeat-interval>
</simple>
</trigger>

</schedule>
</job-scheduling-data>



using System;
using System.Threading;
using Common.Logging;

namespace Quartz.Server
{
/// <summary>
/// A sample job that just prints info on console for demostration purposes.
/// </summary>
public class SampleJob : IJob
{
private static readonly ILog logger = LogManager.GetLogger(typeof(SampleJob));

/// <summary>
/// Called by the <see cref="IScheduler" /> when a <see cref="ITrigger" />
/// fires that is associated with the <see cref="IJob" />.
/// </summary>
/// <remarks>
/// The implementation may wish to set a result object on the
/// JobExecutionContext before this method exits. The result itself
/// is meaningless to Quartz, but may be informative to
/// <see cref="IJobListener" />s or
/// <see cref="ITriggerListener" />s that are watching the job's
/// execution.
/// </remarks>
/// <param name="context">The execution context.</param>
public void Execute(IJobExecutionContext context)
{
logger.Info("SampleJob running...");
Thread.Sleep(TimeSpan.FromSeconds(5));
logger.Info("SampleJob run finished.");
}
}
}
...全文
974 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cslp517 2018-03-30
  • 打赏
  • 举报
回复
把quartz_jobs.xml,quartz.config等配置文件的属性“复制到输出目录”改成始终复制就可以了。
john44944 2016-09-28
  • 打赏
  • 举报
回复
解决了吗?我也碰到了,不过我解决了。
iefus 2016-09-08
  • 打赏
  • 举报
回复
会是.netframework 版本的问题么,我用的 4.5.2
iefus 2016-09-08
  • 打赏
  • 举报
回复
在猜想是 app.config 文件的问题 我的配置文件里只有一个db 连接串,我把sample的下面copy过来,

  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
  </configSections>
x.SetDescription(Configuration.ServiceDescription);报错了 “System.TypeInitializationException”类型的异常在 Quartz.exe 中发生,但未在用户代码中进行处理 其他信息: “Quartz.Server.Configuration”的类型初始值设定项引发异常。

            HostFactory.Run(x =>
                                {
                                    x.RunAsLocalSystem();

                                    x.SetDescription(Configuration.ServiceDescription);
                                    x.SetDisplayName(Configuration.ServiceDisplayName);
                                    x.SetServiceName(Configuration.ServiceName);

                                    x.Service(factory =>
                                                  {
                                                      QuartzServer server = QuartzServerFactory.CreateServer();
                                                      server.Initialize();
                                                      return server;
                                                  });
                                });
iefus 2016-09-07
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
HostFactory.Run(x =>
            {
                x.RunAsLocalSystem();

                x.SetDescription(Configuration.ServiceDescription);
                x.SetDisplayName(Configuration.ServiceDisplayName);
                x.SetServiceName(Configuration.ServiceName);

                x.Service(factory =>
                {
                    QuartzServer server = QuartzServerFactory.CreateServer();
                    server.Initialize();
                    return server;
                });
            });
你的programe里有这段代码吗?
有的如下,代码基本和Sample一样的,不同点是我自己创建framework 4.5.2 工程,NuGet安装框架,然后把sample的类文件copy过来

using System.IO;
using Topshelf;

namespace Quartz.Server
{
    /// <summary>
    /// The server's main entry point.
    /// </summary>
    public static class Program
    {
        /// <summary>
        /// Main.
        /// </summary>
        public static void Main()
        {
            // change from service account's dir to more logical one
            Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

            HostFactory.Run(x =>
                                {
                                    x.RunAsLocalSystem();

                                    x.SetDescription(Configuration.ServiceDescription);
                                    x.SetDisplayName(Configuration.ServiceDisplayName);
                                    x.SetServiceName(Configuration.ServiceName);

                                    x.Service(factory =>
                                                  {
                                                      QuartzServer server = QuartzServerFactory.CreateServer();
                                                      server.Initialize();
                                                      return server;
                                                  });
                                });
        }
    }
}
  • 打赏
  • 举报
回复
HostFactory.Run(x =>
            {
                x.RunAsLocalSystem();

                x.SetDescription(Configuration.ServiceDescription);
                x.SetDisplayName(Configuration.ServiceDisplayName);
                x.SetServiceName(Configuration.ServiceName);

                x.Service(factory =>
                {
                    QuartzServer server = QuartzServerFactory.CreateServer();
                    server.Initialize();
                    return server;
                });
            });
你的programe里有这段代码吗?
iefus 2016-09-07
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
想用控制台方式去调用一个阻塞式的过程,你必须在子线程中异步调用它。
怎么调用,我看Sample的例子,和我自己的基本一样。把Sample代码导入开发工具, 运行之后可以调用job程序的。
  • 打赏
  • 举报
回复
想用控制台方式去调用一个阻塞式的过程,你必须在子线程中异步调用它。
  • 打赏
  • 举报
回复
想用控制台方式去调用一个阻塞式的过程,你必须异步调用它。
iefus 2016-09-07
  • 打赏
  • 举报
回复
有人熟悉这个框架吗

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧