<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ALL is Well!

    敏捷是一條很長的路,摸索著前進著

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks
    Quartz版本為1.8.3
    Spring版本為2.5

    自定義作業(yè)表 QRTZ_JOB。
    其中定義 作業(yè)標識、作業(yè)名稱、類名、觸發(fā)器名稱、觸發(fā)器腳本等。
    下面看看在Spring中如何配置Quartz。
    applicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans
        
    xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xmlns:context
    ="http://www.springframework.org/schema/context"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans 
                            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                            http://www.springframework.org/schema/aop 
                            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                            http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd"

               default-lazy-init
    ="false">
        
        
    <context:component-scan base-package="com.jn" />
        
        
    <tx:advice id="txAdvice" transaction-manager="txManager">
            
    <tx:attributes>
               
    <tx:method name="insert*" propagation="REQUIRED"/>
               
    <tx:method name="del*" propagation="REQUIRED"/>
               
    <tx:method name="update*" propagation="REQUIRED"/>
               
    <tx:method name="*" read-only="true"/>
           
    </tx:attributes>
        
    </tx:advice>

        
    <aop:config>
           
    <aop:pointcut id="allManagerMethod" expression="execution(* com.jn.*.*(..))"/>
           
    <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
        
    </aop:config>
        
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            
    <property name="dataSource" ref="proxoolDataSource" />
        
    </bean>
            
    <bean id="propertyConfigurer"
            class
    ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            
    <property name="locations">
                
    <list>      
                    
    <value>classpath:jdbc.properties</value>
                
    </list>      
            
    </property>      
        
    </bean> 
        
    <bean id="proxoolDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            
    <property name="driverClassName" value="${driver}" />
            
    <property name="url" value="${dburl}" />
            
    <property name="username" value="${username}" /> 
            
    <property name="password" value="${password}" />
        
    </bean>
        
        
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
            
    <property name="dataSource">
                
    <ref local="proxoolDataSource"/>
            
    </property>
            
    <property name="configLocation">
                
    <value>classpath:sql-map-config.xml</value>
            
    </property>
        
    </bean>
        
        
    <bean name="quartzScheduler" lazy-init="true" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            
    <property name="dataSource" ref ="proxoolDataSource" />
            
    <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
            
    <property name="configLocation" value="classpath:quartz.properties"/>
        
    </bean>
    </beans>

    Main.java
    package com.jn.common;

    import com.jn.qrtz.job.JobManager;
    import com.jn.spring.BeanFactory;

    /**
     * 啟動類
     * 
    @author l
     
    */

    public class Main {
        
    /**
         * 啟動函數(shù)
         * 
    @param args
         
    */

        
    public static void main(String[] args) {
            
    try {
                JobManager mgr 
    = (JobManager)BeanFactory.factory().getBean("jobManager");
                mgr.init();
                mgr.dispatch();
            }

            
    catch (Exception e) {
                e.printStackTrace();
            }

        }

    }


    JobManager.java
    package com.jn.qrtz.job;

    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;

    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;

    import com.jn.persistence.QrtzDaoImpl;
    import com.jn.qrtz.JobConfig;
    import com.jn.qrtz.service.SchedulerServiceImpl;

    /**
     * 作業(yè)管理類
     * 
     * 
    @author l
     
    */

    @Component(
    "jobManager")
    @Scope(
    "singleton")
    public class JobManager {
        
    private Logger               log     = Logger.getLogger(JobManager.class);

        @Autowired(required 
    = true)
        
    private QrtzDaoImpl          qrtzDao;

        @Autowired(required 
    = true)
        
    private SchedulerServiceImpl schedulerService;

        
    /** 作業(yè)列表 */
        
    private List<JobConfig>      allJobs = new ArrayList<JobConfig>();

        
    /**
         * 初始化作業(yè)列表
         
    */

        
    public synchronized void init() {
            
    try {
                allJobs 
    = qrtzDao.queryAllJobs();
                log.info(
    "作業(yè)初始化完成。");
            }

            
    catch (SQLException e) {
                log.error(
    "初始化作業(yè)失敗。" + e.getMessage());
            }

        }


        
    /**
         * 系統(tǒng)啟動時派發(fā)作業(yè)
         
    */

        
    public void dispatch() {
            
    for (JobConfig job : allJobs) {
                
    try {
                    schedulerService.schedule(job);
                }

                
    catch (Exception e) {
                    e.printStackTrace();
                    log.error(job.toString() 
    + "派發(fā)失敗。" + e.getMessage());
                }

            }

        }


        
    public SchedulerServiceImpl getSchedulerService() {
            
    return schedulerService;
        }


        
    public void setSchedulerService(
            @Qualifier(
    "schedulerService") SchedulerServiceImpl schedulerService) {
            
    this.schedulerService = schedulerService;
        }


        
    public QrtzDaoImpl getQrtzDao() {
            
    return qrtzDao;
        }


        
    public void setQrtzDao(@Qualifier("qrtzDao") QrtzDaoImpl qrtzDao) {
            
    this.qrtzDao = qrtzDao;
        }

    }


    其中QrtzDaoImpl對象是用于從QRTZ_JOB表中取得作業(yè)列表,并將作業(yè)封裝為JobConfig對象。

    SchedulerServiceImpl對象用于派發(fā)Job。
    SchedulerServiceImpl.java
    package com.jn.qrtz.service;

    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Component;

    import com.jn.qrtz.JobConfig;
    import com.jn.qrtz.job.WorkDispatcher;

    /**
     * 作業(yè)派發(fā)、移除類
     * 
    @author l
     
    */

    @Component(
    "schedulerService")
    public class SchedulerServiceImpl {
        @Autowired
        
    private Scheduler scheduler;

        
    /**
         * 移除作業(yè)
         * 
    @param config
         * 
    @return
         * 
    @throws SchedulerException
         
    */

        
    public boolean remove(JobConfig config) throws SchedulerException {
            
    if(config == null{
                
    return false;
            }

            
    return removeJob(config.getJobName(), config.getJobGroup());
        }


        
    /**
         * 派發(fā)作業(yè)
         * 
    @param config
         * 
    @throws Exception
         
    */

        
    public void schedule(JobConfig config) throws Exception {
            String triggerName 
    = config.getTriggerName();
            String triggerGroup 
    = config.getTriggerGroup();
            String cronStr 
    = config.getTriggerScript();
            
            String jobName 
    = config.getJobName();
            String jobGroup 
    = config.getJobGroup();
            JobDetail jobDetail 
    = new JobDetail(jobName, jobGroup, WorkDispatcher.class);
            jobDetail.getJobDataMap().put(JobConfig.EXEC_INFO, config.cloneInfo());
            
            schedule(triggerName, triggerGroup, cronStr, jobDetail);
        }


        
    /**
         * 派發(fā)作業(yè)
         * 
    @param name
         * 
    @param group
         * 
    @param cronStr
         * 
    @param jobDtl
         * 
    @throws Exception
         
    */

        
    private void schedule(String name, String group, String cronStr, JobDetail jobDtl)
            
    throws Exception {
            CronTrigger cronTrigger 
    = new CronTrigger(name, group, jobDtl.getName(), jobDtl.getGroup(),
                cronStr);
            scheduler.scheduleJob(jobDtl, cronTrigger);
        }


        
    /**
         * 移除作業(yè)
         * 
    @param jobName
         * 
    @param group
         * 
    @return
         * 
    @throws SchedulerException
         
    */

        
    private boolean removeJob(String jobName, String group) throws SchedulerException {
            scheduler.pauseJob(jobName, group);
            
    return scheduler.deleteJob(jobName, group);
        }

        
        @Autowired
        
    public void setScheduler(@Qualifier("quartzScheduler") Scheduler scheduler) {
            
    this.scheduler = scheduler;
        }

    }

    由這些代碼,便可以通過Quartz框架去調(diào)度 我們定義在QRTZ_JOB表中的作業(yè)了。

    由于Quartz框架本身依賴一些表,其中我們執(zhí)行的作業(yè),同樣會被框架保存在那些它所依賴的表中,
    如:qrtz_job_details表。
    當Spring加載quartzScheduler時,Quartz框架會被自動啟動并調(diào)度保存在qrtz_job_details表中的作業(yè)。
    所以再次啟動時,應(yīng)先將 Quartz依賴的表清空。
    當然這個操作也可以被集成在代碼中。

    還有另外一種方案可實現(xiàn)此的功能,便是重寫org.springframework.scheduling.quartz.SchedulerFactoryBean類,
    自定義類繼承此類,在自定義的類中注入自己的對象,在其中取得 作業(yè)列表,
    并生成Trigger對象數(shù)組,調(diào)用 org.springframework.scheduling.quartz.SchedulerFactoryBean 類的setTriggers(Trigger[]) 方法。
    設(shè)置好Trigger數(shù)據(jù)。
    最后再 調(diào)用Scheduler的start()方法,Quartz便可調(diào)度這些作業(yè)了。

    本文為原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處BlogJava
    posted on 2010-09-06 19:08 李 明 閱讀(2469) 評論(0)  編輯  收藏 所屬分類: QuartzSpring

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 成人片黄网站A毛片免费| 日韩少妇内射免费播放| 亚洲一级毛片在线播放| 亚洲美女精品视频| 久久久久亚洲AV无码观看| 亚洲美女精品视频| 亚洲人成影院在线高清| 亚洲va在线va天堂成人| 亚洲一区中文字幕在线电影网| 亚洲人成电影院在线观看| 国产精品亚洲专区在线观看| 中文字幕精品三区无码亚洲| 亚洲av成人中文无码专区| 日韩亚洲综合精品国产| 一级女性全黄生活片免费看| 巨胸狂喷奶水视频www网站免费| a级毛片免费观看视频| 免费A级毛片av无码| 日韩欧毛片免费视频| 免费毛片网站在线观看| 免费一级毛片不卡不收费| 国产亚洲午夜高清国产拍精品 | 美女扒开尿口给男人爽免费视频| 野花视频在线官网免费1| 久久99精品免费一区二区| 99视频在线看观免费| 久久久久久久久免费看无码| 国产小视频在线观看免费| 国产成人亚洲精品狼色在线| 亚洲五月六月丁香激情| 国产亚洲中文日本不卡二区| 免费人成网站永久| 久久久久成人片免费观看蜜芽 | 男女超爽视频免费播放| 怡红院免费的全部视频| 啦啦啦完整版免费视频在线观看| 免费看的黄色大片| 亚洲欧洲自拍拍偷午夜色无码| 亚洲最大黄色网址| 无套内射无矿码免费看黄| 免费A级毛片无码视频|