6

我有一个带有嵌入式 Quartz.Net 的 Windows 服务,但似乎找不到在 Quartz.Net 作业中创建对实例化对象的引用的方法......

当 Windows 服务启动时,它会实例化一些用于日志记录、数据库访问和其他目的的对象,因此我希望我的 Quartz.Net 作业使用这些已经实例化的对象,而不是创建自己的这些对象的实例。但是,Quartz.Net 作业是由调度程序使用无参数构造函数实例化的,因此无法使用构造函数传递引用。

我是否必须创建自己的 JobFactory 实现,这是实现这一目标的唯一方法吗?

4

3 回答 3

4

我认为适用于这种情况的方法是使用作业侦听器。您可以创建一个什么都不做的“虚拟”作业,以及一个检测作业何时运行的侦听器。您可以使用对任何依赖项的引用来实例化侦听器,只要它们在您设置作业调度时可用。

IJobDetail job = JobBuilder.Create<DummyJob>()
            .WithIdentity("job1") 
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("trigger1")
            .StartNow()
            .WithSimpleSchedule(x => x
                .WithInterval(interval)
                .RepeatForever())
            .Build();

        _scheduler.ScheduleJob(job, trigger);

       MyJobListener myJobListener = new MyJobListener (dependency1, dependency2);

        _scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("job1")));
于 2015-04-14T09:55:25.193 回答
2

您可以在其中添加对象的键值对jobDetail.JobDataMap并检索它们from(JobExecutionContext) context.JobDetail.JobDataMap

于 2011-07-28T08:27:45.493 回答
1

不同的上下文(Linux/JAVA),但是创建你自己的继承自 Quartz 的工厂。覆盖方法“createScheduler”。调用 super 方法,将实例保存在静态(同步)哈希图中。编写静态方法以按名称获取实例。

于 2011-01-03T18:20:08.593 回答