2015-01-05 174 views
0

夸脫的例子,通常這樣做:石英調度程序 - 使用相同類的不同作業?

JobDetail job = newJob(PrintMessageJob.class) 

如何創建已經設置了一個param在運行時定義的工作嗎?這樣的事情將是很好的,但是是不允許的:

JobDetail job = newJob(new PrintMessageJob("my message")); 

感謝

回答

2

你必須做什麼如下。

JobDetail job = newJob(PrintMessageJob.class) 
       .usingJobData("message", "my message") 
       .build(); 

public class PrintMessageJob implements Job { 

    public PrintMessageJob() { 
    } 

    public void execute(JobExecutionContext context) throws JobExecutionException 
    { 
     JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 

     String message = dataMap.getString("message"); 
     ... 
    } 
} 
+0

Thx,這很有幫助。但是如果我的喬布斯需要操作某些對象的實例呢?我想使用JobData(「myThing」,this),但只有不可變(String,Double等)可以在該地圖中傳遞。 – Andrew

+0

我想我可以將我需要操作的所有對象添加到靜態哈希映射中,然後在創建作業對象時傳遞鍵,以便在作業運行時可以獲取對實例進行操作的引用。這也不是很好。 – Andrew

+0

你只應該這樣做,如果散列和哈希表中放置的對象只是不可變的。 – shazin