我打算编写一个ASP.NET页面来按需触发作业。目前,我使用SimpleTrigger类来触发作业,但__Trigger类没有支持将对象类型作为JobParameters中的值,并且据我所知,在挂钩下使用WCF Tcp绑定将参数传递给作业调度引擎。我想知道如何传递自定义对象(可序列化)作为工作参数。 感谢您的咨询!Quartz Scheduler:如何将自定义对象作为JobParameter传递?
14
A
回答
4
当您安排作业时,您可以在JobDetail
对象上设置JobDataMap
并将其传递给您的调度程序,但在quartz.net tutorial中描述了一些限制。这项工作可以通过访问数据:
JobDataMap dataMap = context.JobDetail.JobDataMap;
不过我更喜欢访问我的工作配置,通过库注入工作。
24
有通过一个石英工作执行时可以检索的对象有两种方法:
传递实例的数据图。
// Create job etc...
var MyClass _myInstance;
statusJob.JobDataMap.Put("myKey", _myInstance);
// Schedule job...
检索作业的Execute()
方法的实例是这样的::
public void Execute(IJobExecutionContext context)
{
var dataMap = context.MergedJobDataMap;
var myInstance = (MyClass)dataMap["myKey"];
OR
添加当您设置的工作,你的情况下,像这样的关键添加到地图当您将作业设置为调度程序上下文时,实例如下:
ISchedulerFactory schedFact = new StdSchedulerFactory();
_sched = schedFact.GetScheduler();
_sched.Start();
// Create job etc...
var MyClass _myInstance;
_sched.Context.Put("myKey", myInstance);
// Schedule job...
检索作业的Execute()
方法实例是这样的:
public void Execute(IJobExecutionContext context)
{
var schedulerContext = context.Scheduler.Context;
var myInstance = (MyClass)schedulerContext.Get("myKey");
2
我是有hillstuk的答案意想不到的结果上面在多线程环境。 下面是使用Newtonsoft我的解决方案...享受
public void InitJob() {
MyClass data = new MyClass {Foo = “Foo fighters”};
/* a unique identifier for demonstration purposes.. Use your own concoction here. */
int uniqueIdentifier = new Random().Next(int.MinValue, int.MaxValue);
IJobDetail newJob = JobBuilder.Create<MyAwesomeJob>()
.UsingJobData("JobData", JsonConvert.SerializeObject(data))
.WithIdentity($"job-{uniqueIdentifier}", "main")
.Build();
}
/* the execute method */
public class MyAwesomeJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var jobData = JsonConvert.DeserializeObject<MyClass>(context.JobDetail.JobDataMap.GetString("JobData"));
}
}
/* for completeness */
public class MyClass {
string Foo { get; set; }
}
1
你可以把你的实例/对象在IJobDetail。
JobDataMap m = new JobDataMap();
m.Put("Class1", new Class1(){name="xxx"});
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("myJob", "group1")
.UsingJobData(m)//class object
.UsingJobData("name2", "Hello World!")
.Build();
使用
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
Class1 class1 = (Class1)dataMap.Get("Class1");
string x = class1.name;
}
相关问题
- 1. 将自定义对象传递给Arrays.asList
- 2. 如何将自定义对象数组传递给ASMX webservice?
- 3. 作为属性的Asp.net自定义控件传递对象
- 4. Quartz Enterprise Scheduler:计划自己的作业
- 5. 传递一组自定义对象+ Android
- 6. 将对象作为参数传递后的未定义属性
- 7. React- FLUX - 将对象作为参数传递 - 未定义
- 8. WCF RIA Services - 将自定义对象作为参数传递给查询方法
- 9. Quartz Scheduler not running
- 10. Junit for Quartz Scheduler
- 11. 对象如何作为参数传递?
- 12. jQuery - 如何传递$(this)作为对象?
- 13. 如何通过Web服务传递自定义对象
- 14. Android的 - 如何自定义对象传递给片段
- 15. 如何在onEndPage()itext方法中传递自定义对象?
- 16. 如何通过NdefMessage传递自定义对象
- 17. 如何我的自定义对象传递给片段
- 18. 如何使用意图传递自定义列表对象
- 19. 将HttpServletRequest对象作为参数传递
- 20. 如何将自定义对象定义为QAbstractListModel中的角色?
- 21. 将自定义对象从servlet传递到JSP
- 22. 将自定义对象从QtScript传递到C++时出错
- 23. 将自定义对象从Android通过KSOAP传递给webservice
- 24. 将ngModel中的对象传递给自定义控件Angular2
- 25. 将自定义对象传递给Windows Workflow WCF服务
- 26. 将自定义用户对象传递给WCF
- 27. 将自定义对象的ArrayList传递给kSOAP函数
- 28. 传递对象作为OleVariant
- 29. 如何重新定义对象并传递对象?
- 30. 将form.serialize()绑定为自定义对象
感谢您的答复,但我所寻找的是如何通过从外部应用程序的对象。 –
这是我还需要知道的东西...仍在搜索 – evermean
如何在不使用JobDataMap的情况下注入存储库?或者它只是你注入的回购? –