2014-02-27 43 views
3

我想將字符串數組傳遞給正在調度並由Scheduler對象調用的類。 調度類如下:如何在java中的石英調度中傳遞數組作爲參數

String stuff[]={"",""} 
JobDetail job = JobBuilder.newJob(HelloJob.class) 
       .withIdentity("job", "group1").build(); 
job.getJobDataMap().put(HelloJob.data, stuff); 

Trigger trigger = TriggerBuilder 
        .newTrigger() 
        .withSchedule(
        CronScheduleBuilder.cronSchedule(time)) 
        .build(); 
    //schedule it 
Scheduler scheduler = new StdSchedulerFactory().getScheduler(); 
System.out.println("Before starting"); 
scheduler.start(); 
scheduler.scheduleJob(job, trigger); 

數組傳遞到:

public class HelloJob implements Job { 
    static String data[]; 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
     System.out.println("Job"); 
    } 
} 

作業接口:

 public interface Job { 
      void execute(JobExecutionContext context) 
       throws JobExecutionException; 
     } 

是否有任何解決方案來傳遞數組?

回答

0

是的,有一個解決方案。

  1. 刪除static String data[]HelloJob。儘可能避免靜態(特別是陣列)。

  2. 當您在JobDataMap上致電put時,您需要提供密鑰和值。值是你的數組,但你需要選擇一個鍵。因爲它是,你使用的是靜態的String.data數組引用,在你的代碼中,它總是null(不是一個好主意)。您需要定義一個合適的,衆所周知的密鑰。有許多選項可供您使用,但簡單的解決方案是...

  3. static final String DATA_ARRAY_KEY = "data_array";加到HelloJob。儘管我在#1中說過要避免靜態,但這個是安全的,因爲它是final,並且不像陣列,永遠不能修改String。我們使用這個作爲常數,您的知名關鍵。現在您的put()調用應該如下所示:put(HelloJob.DATA_ARRAY_KEY, stuff)

  4. 現在,您需要在作業運行execute方法時取出數組。在這種方法中,你可以通過調用context.getMergedJobDataMap()來訪問你的JobDataMap,你可以通過get(DATA_ARRAY_KEY)來返回String[]

這應該解決你的原始問題。然而,你並沒有舉出你陣列中將會發生什麼的例子。根據你打算如何使用它,這可能是一個更好的解決方案,使用JobDataMap上的專門方法,如putAsString(String key, String value)getAsString(String key)

相關問題