Quartz結合Spring框架在真實項目中的使用

jopen 11年前發布 | 26K 次閱讀 Quartz Spring 作業調度框架

需求:在某個時間做某件事,任務是動態的,到點就要執行

在spring的配置文件中加入如下配置

 
    <!-- quartz配置 -->  
    <bean id="scheduler"  
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="schedulerContextAsMap">  
            <map>  
                <entry key="timeout" value="30" />  
            </map>  
        </property>  
        <property name="quartzProperties">  
            <props>  
                <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>  
                <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>  
                <prop key="org.quartz.jobStore.dataSource">qzDS</prop>  
                <prop key="org.quartz.dataSource.qzDS.driver">${driverClass}</prop>  
                <prop key="org.quartz.dataSource.qzDS.URL">${jdbcUrl}</prop>  
                <prop key="org.quartz.dataSource.qzDS.user">${username}</prop>  
                <prop key="org.quartz.dataSource.qzDS.password">${password}</prop>  
                <prop key="org.quartz.dataSource.qzDS.maxConnections">30</prop>  
                <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>  
                <prop key="org.quartz.threadPool.threadCount">10</prop>  
            </props>   
        </property>   
     </bean>   
</div> </div> 自定義一個listener監聽器必須放在spring監聽器后面,待spring容器啟動完成后執行

 
    **

 * Quartz任務檢測監聽器  
 * 在Spring容器啟動后檢測是否有未完成的任務  
 * 如果有的話,就繼續執行  
 * @author winter.liu  
 *  
 */  
public class QuartzListener implements ServletContextListener{  

    @Override  
    public void contextDestroyed(ServletContextEvent event) {  

    }  

    @Override  
    public void contextInitialized(ServletContextEvent event) {  
        try{  
            Scheduler scheduler=(Scheduler)SpringUtil.getWebBean("scheduler");  
            //獲取調度器中所有的觸發器組  
            String[] tiggerGroups=scheduler.getTriggerGroupNames();  
            for(int i=0;i<tiggerGroups.length;i++){  
                String[] trigges=scheduler.getTriggerNames(tiggerGroups[i]);  
                for(int j=0;j<trigges.length;j++){  

                    Trigger tg=scheduler.getTrigger(trigges[j],tiggerGroups[i]);  

                    if(tg instanceof SimpleTrigger){  
                        scheduler.rescheduleJob(trigges[j],tiggerGroups[i], tg);  
                    }  
                }  
            }  
            //開啟容器  
            scheduler.start();  
        }catch (Exception e) {  
            e.printStackTrace();  
        }  

    }  

}  </pre></b><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959548949325005050" target="_blank"></a></div>

</div> </div> 編寫一個簡單的測試job 

    /**

 * 測試job 
 * @author winter.liu 
 * 
 */  
public class SimpleJob implements Job{  

    @Override  
    public void execute(JobExecutionContext jobCtx) throws JobExecutionException {  
        System.out.println(jobCtx.getTrigger().getName()+" triggered.time is: "+(new Date()));  

    }  

}  </pre></b> <div class="dp-highlighter bg_java">

    /**

 * 自定義發布job工具類 
 * @author winter.liu 
 * 
 */  
public class ScheduleJob {  

    /** 
     * @param job 任務源對象 
     * @param cronExpression  Cron表達式 例如:0 07 14 2 12 ? 2013 
     */  
    public static void scheduleJobBean(Class<?> job,String cronExpression){  
        try {  
             JobDetail jobDetail=new JobDetail(UUID.randomUUID().toString(),UUID.randomUUID().toString(),job);  
             CronTrigger cronTrigger=new CronTrigger(UUID.randomUUID().toString(),UUID.randomUUID().toString());  
             CronExpression cexp=new CronExpression(cronExpression);  
             cronTrigger.setCronExpression(cexp);  
             Scheduler scheduler=(Scheduler)SpringUtil.getWebBean("scheduler");  
             scheduler.scheduleJob(jobDetail,cronTrigger);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

    }  

}  </pre></b><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959548949325005050" target="_blank"></a></div>

</div> </div> 使用的lib版本是spring3.05和quartz 1.8.6的

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!