2015-07-06 23 views
0

我想在Java上創建多個線程,併爲每個線程分配一個單獨的Quartz調度器。但我能找到的唯一方法是爲每個單獨的調度程序創建多個.properties文件。由於我有大量的線程,創建這麼多的屬性文件是不可行的。有沒有更好的方法來做到這一點?用於多線程的多個石英調度器

+0

保存配置數據庫和動態檢索它.... –

回答

0

請使用這個概念來處理多任務多線程的調度動態參數

/* 
* Date : 2015-07-06 
* Author : Bhuwan Prasad Upadhyay 
*/ 
package com.developerbhuwan.quartzexample; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.quartz.CronScheduleBuilder; 
import org.quartz.Job; 
import org.quartz.JobBuilder; 
import org.quartz.JobDataMap; 
import org.quartz.JobDetail; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
import org.quartz.JobKey; 
import org.quartz.Scheduler; 
import org.quartz.SchedulerException; 
import org.quartz.Trigger; 
import org.quartz.TriggerBuilder; 
import org.quartz.TriggerKey; 
import org.quartz.impl.StdSchedulerFactory; 

/** 
* 
* @author developerbhuwan 
*/ 
public class MutlipleScheduleThread { 

    public static void main(String[] args) { 
     new MutlipleScheduleThread().createMultipleThread(); 
    } 

    private void createMultipleThread() { 
     for (int i = 0; i <= 10; i++) { //create 10 scheduler thread to perform different job on the basis of param 
      try { 
       JobDataMap jobDataMap = new JobDataMap(); 
       jobDataMap.put(MyJob.KEY_PARAM, "ParamValue"); 
       JobKey jobKey = new JobKey("UniqueJobId" + i, "JobGroup"); 
       JobDetail job = JobBuilder 
         .newJob(MyJob.class) 
         .withIdentity(jobKey) 
         .setJobData(jobDataMap) 
         .storeDurably(true) 
         .build(); 
       TriggerKey triggerKey = new TriggerKey("UniqueTriggerID" + i, "TriggerGroup"); 
       Trigger trigger = TriggerBuilder 
         .newTrigger() 
         .withIdentity(triggerKey) 
         .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0/1 1/1 * ? *")) //every one hour 
         .forJob(job) 
         .build(); 
       Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
       scheduler.scheduleJob(job, trigger); 
      } catch (SchedulerException ex) { 
       Logger.getLogger(MutlipleScheduleThread.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 

    private static class MyJob implements Job { 

     private static String KEY_PARAM = "param"; 

     @Override 
     public void execute(JobExecutionContext context) throws JobExecutionException { 
      JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 
      String param = dataMap.getString(KEY_PARAM); 
      //do job on the basis of parameter 
     } 
    } 
} 

源代碼Quartz Example

+1

的聯繫的基礎上,現已死亡,請更新。 –