石英作业未开始

Posted

技术标签:

【中文标题】石英作业未开始【英文标题】:Quartz job not starting 【发布时间】:2019-09-08 13:46:58 【问题描述】:

我正在尝试使用 Abp.Quartz 来安排作业。

使用 net core 2.2, abp 4.5

我在此处的文档中所做的一切 https://aspnetboilerplate.com/Pages/Documents/Quartz-Integration ,只能在 PostInitialize 方法中解决。

最后我尝试了与文档中完全相同的方法(从控制器启动调度程序)。

但它也没有奏效。作业未开始。

namespace Cloud

    [DependsOn(typeof(AbpZeroCoreModule),
               typeof(AbpQuartzModule))]
    public class CloudCoreModule : AbpModule
    
        public override void PreInitialize()
        
        

        public override void Initialize()
                    
            IocManager.RegisterAssemblyByConvention(typeof(CloudCoreModule)
                      .GetAssembly());
        

        public override void PostInitialize()
        
             IocManager.Resolve<IQuartzScheduleJobManager>().ScheduleAsync<ApiRequestQueues.ApiRequestProcessor>(
                job =>
                
                    job
                      .WithIdentity("RevolutApiProcessor")
                      .WithDescription("A job witch processing request front");
                ,
                trigger =>
                
                    trigger
                        .StartNow()
                        .WithSimpleSchedule(
                            schedule =>
                            
                                schedule
                                    .RepeatForever()
                                    .WithIntervalInSeconds(5)
                                    .Build();
                            );

                );
        
    

这里是 ApiRequestProcessor 类

public class ApiRequestProcessor : JobBase, ITransientDependency

    public override async Task Execute(IJobExecutionContext context)
    
     //some work
    

【问题讨论】:

您好!我知道现在问这个问题有点太晚了,但它可能对像我这样的其他人有所帮助,因为我遇到了类似的问题。有 2 个入口点可供调查: 1. 您是否检查过 App_Data 文件夹中的日志? 2. 你的 WebCoreModule 中添加了 [DependsOn(typeof(CloudCoreModule)] 吗? 我遇到了完全相同的问题。你有没有找到解决这个问题的方法? @plastiquewind - Abp.Quartz 工作需要 cloudcoremodule 吗?文档中没有提到... 嗨@fullStackChris。文档中没有提到它,因为 CloudCoreModule 不是框架的一部分。只是原问题中提到的一个自定义类,上面可以看到。 【参考方案1】:

迟到总比没有好。

虽然没有 Abp.Quartz 包,但我已经成功地完成了这项工作。如果您能够使用标准的Quartz 包,则可以使用以下步骤:

    Startup.cs 中正常定义和设置您的作业 确保您的类实现 IJob 以使 Quartz 快乐,并实现 ITransientDependency 以使 ASP.NET Boilerplate 快乐 非常重要,如果您的作业代码以任何方式使用 DbContext,您需要确保 [UnitOfWork] 装饰器在您的作业类上(这对于确保您的作业自动运行并执行不会影响您服务器上可能发生的任何其他事务)

简而言之,一个工作的准系统工作类可能如下所示:

using System;
using Quartz;

namespace MyProject.MyJobService

    [UnitOfWork]
    public class SimpleJob : IJob, ITransientDependency
    
        public async Task Execute(IJobExecutionContext context)
         
            Console.WriteLine("Hello from quartz job!");
        
    

更多信息和讨论可以在这里找到(以及我最终是如何得出这个解决方案的):https://github.com/aspnetboilerplate/aspnetboilerplate/issues/3757

如有疑问,请仔细阅读 Quartz 在应用程序输出中告诉您的内容 - 它通常会提供有关问题所在的线索,但我相信我的解决方案对您有用?

【讨论】:

以上是关于石英作业未开始的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.NoSuchMethodError 在调用在 jboss mbean 中声明的石英作业期间

石英调度程序无法获取触发器

如何为 cron 触发器处理石英夏令时的用户时区?

石英:内存泄漏?

计划的作业未启动

Spring Batch作业未结束