我打算編寫一個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的情況下注入存儲庫?或者它只是你注入的回購? –