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

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

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

    ann
    冰是沒有未來的,因為它的永恒
    posts - 107,comments - 34,trackbacks - 0
    一.Quartz介紹
         Quartz是一個作業調度系統(a job scheduling system),負責在約定的時間到達時執行(或通知)其他軟件控制。是一個Java的定時任務框架,使用它可以方便的實現計劃任務,即在某個時間或每隔一定時間運行一個任務。Quartz的核心是Job/JobDetail,Trigger和Scheduler。

        1.Job/JobDetail
           Job/JobDetail=既要執行的任務,可以通過實現Job(interface)中的excute方法來指定任務的具體操作。 他描述了一個任務具體的信息,比如名稱,組名等等。JobDetail對象是在Quartz的客戶端(我們的程序)在Job被關聯加入到Scheduler時創建的,JobDetail包含了Job的各種屬性值和   JobDataMap,JobDataMap中存放了與之相關的Job類實例的狀態信息。

        2.Trigger
           用于控制一組Job的觸發,包裹SimmperTrigger和CronTrigger,后者支持一種描述觸發事件和間隔的表達式語言。Quartz有個很好的想法就是分離了任務和任務執行的條件。Trigger就是控制任務執行條件的類,當Trigger認為執行條件滿足的時刻,Trigger會通知相關的Job去執行。分離的好處是:
                1).你可以為某個Job關聯多個Trigger,其中任何一個條件滿足都可以觸發job執行,這樣可以完成一些組合的高級觸發條件
                2).當Trigger失效后(比如:一個永遠都不能滿足的條件),你不必去聲明一個新的job,代替的是你可以為job關聯一個新的Trigger讓job可以繼續執行。
      
        3.Scheduler是控制和管理觸發器的啟動和終止。
           使用Scheduler前必須實例化Scheduler,需要由SchedulerFactory類來創建Scheduler,Factory的實例可以通過在JNDI存儲中的Factory的序列化的方式獲取,實例化Factory后直接使用該實例很容易。如下:
           public class WangyouQuartzListener extends QuartzInitializerListener {
                public  static  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

                public WangyouQuartzListener() {
                           super();
                }

               public void contextInitialized(ServletContextEvent event) {
                        super.contextInitialized(event);
                        String factoryKey = event.getServletContext().getInitParameter("servlet-context-factory-key");
                         if (factoryKey == null) {
                                   factoryKey = QUARTZ_FACTORY_KEY;
                          }
                          StdSchedulerFactory factory = (StdSchedulerFactory) event.getServletContext().getAttribute(factoryKey);

                       try {
                             QuartzScheduleHolder.getInstance().setScheduler(factory.getScheduler());
                           //per 2 hours add friends
                           Trigger trigger =  TriggerUtils.makeHourlyTrigger(24);
                           //Trigger trigger =  TriggerUtils.makeSecondlyTrigger(60);
                           trigger.setName(AddNewUserFriendJobDetail.JOB_NAME);
                          trigger.setStartTime(this.getBeforeAfterDate(1,-13));
                          QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new AddNewUserFriendJobDetail(),trigger);
                          //把job和Trigger關聯,這樣當Trigger認為應該觸發的時候就會調用(實際上是Scheduler調用)job.execute方法了。

                          //per 3 day send mail and leave message
                          Trigger trigger2 =  TriggerUtils.makeHourlyTrigger(24*3);
                          trigger2.setStartTime(this.getBeforeAfterDate(1,-12));
                          trigger2.setName(LeaveMessageNewUserJobDetail.JOB_NAME);
                          QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new LeaveMessageNewUserJobDetail(),trigger2);

                           // per 6  recommend video
                          Trigger trigger3 =  TriggerUtils.makeHourlyTrigger(24*7);
                          trigger3.setName(RecommendVideoNewUserJobDetail.JOB_NAME);
                          trigger3.setStartTime(this.getBeforeAfterDate(2,-11));
                          QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new RecommendVideoNewUserJobDetail(),trigger3);

               
                             QuartzScheduleHolder.getInstance().getScheduler().start();
                       } catch (Exception e) {
                            e.printStackTrace();
                       }
                  }

                 public void contextDestroyed(ServletContextEvent event) {
                       super.contextDestroyed(event);
                         QuartzScheduleHolder.getInstance().setScheduler(null);
                 }

                  private Date getBeforeAfterDate( int day,int hour){
                           Calendar   cal   =   Calendar.getInstance();
                          cal.add(Calendar.DATE,day);
                         cal.add(Calendar.HOUR,hour);
                         return cal.getTime();
                 }
               }
    二。Spring Quartz
          Spring的scheduling。quartz包中對Quartz的框架進行封裝,使得開發時不用寫任何Quartz和Spring的代碼就可以實現定時任務。Spring通過JobDetailBean,MethodInvokingJobDetailFactoryBean實現Job的定義,后者更加使用,只需指定要運行的類,和該類中運行的方法即可,Spring將自動生成符合Quartz要求的JobDetail。例如:
          1.jobDetail
             public class SayHelloJob {
       
                       private static  DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                       private String message;

                       public String getMessage() {
                               return message;
                      }

                      public void setMessage(String message) {
                                this.message = message;
                     }

                     public void sayHello(){
                              Date date = new Date();
                             System.out.println(dateFormat.format(date)+" :"+this.getMessage() );
                     }
              }
           2.spring的配置文件:quartzbean.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:p="http://www.springframework.org/schema/p"
                        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

                        <bean name="sayHelloJob" class="com.fg114.takeout.job.SayHelloJob">
                                  <property name="message" value="start .............." />
                       </bean>

                       <bean name="sayHelloDetailBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                                  <property name="targetObject" ref="sayHelloJob" />
                                 <property name="targetMethod" value="sayHello"/>
                        </bean>

                       <bean name="simpleTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
                                      <!--這里定義定時任務的對象的位置-->
                                <property name="jobDetail" ref="sayHelloDetailBean"/>
                               <!--這里定義每六秒鐘程序執行一次-->
                                 <property name=""></property>
                                <property name="repeatInterval" value="6000"/>
                               <!--這里定義程序啟動兩秒鐘后開始執行-->
                             <property name="startDelay" value="2000"/>
                        </bean>
                     <! --          啟動任務    -->
                       <bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                             <property name="triggers">
                                 <list>
                                      <ref bean="simpleTriggerBean"/>
                                </list>
                           </property>
                      </bean>
                 </beans>
    3.web.xml :
                加入
               <listener>
                 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
               </listener>
           注意:common-collections.jar 版本布不能是2.1版本的



             

         
    posted on 2009-03-23 10:56 冰是沒有未來的,因為它的永恒 閱讀(2432) 評論(0)  編輯  收藏 所屬分類: java

    當下,把心放下 放下如果是可能的,那一定是在當下,
    不在過去,也不在未來。
    當下放下。唯有活在當下,你的問題才能放下。

    主站蜘蛛池模板: 亚洲精品动漫人成3d在线| 免费看少妇作爱视频| 国产成人亚洲精品狼色在线| 美女视频黄频a免费观看| 日本一线a视频免费观看| 精品久久久久久亚洲中文字幕 | 疯狂做受xxxx高潮视频免费| 日韩免费一区二区三区| 亚洲av永久无码天堂网| 又粗又大又长又爽免费视频| 免费夜色污私人影院网站| 国产亚洲大尺度无码无码专线 | 亚洲乱码中文字幕久久孕妇黑人 | 亚洲国产激情在线一区| 无码中文字幕av免费放| 日本亚洲欧美色视频在线播放| 免费人成视网站在线观看不卡| 一级毛片**免费看试看20分钟| 国产A在亚洲线播放| 亚洲美女免费视频| 亚洲精品日韩一区二区小说| 免费看男女下面日出水视频| caoporn国产精品免费| 亚洲AV无码乱码国产麻豆 | 中文字幕永久免费视频| 亚洲精品夜夜夜妓女网| 91短视频在线免费观看| 亚洲夂夂婷婷色拍WW47| 亚洲福利中文字幕在线网址| 国产麻豆成人传媒免费观看| 亚洲一级视频在线观看| 又粗又大又硬又爽的免费视频| 大地资源在线资源免费观看| 亚洲乱码在线播放| 午夜亚洲国产成人不卡在线| 国产婷婷成人久久Av免费高清 | 一级人做人爰a全过程免费视频| 亚洲一区二区三区高清| 日韩在线天堂免费观看| 日韩免费视频一区二区| 亚洲爆乳精品无码一区二区|