zoukankan      html  css  js  c++  java
  • SSH框架,xml配置实现动态定时器

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
        <beans>  
        <!--注册定时执行任务实体-->
        <!-- 日定时器 -->
         <bean id="runkQuartz" class="com.idazui.lobby.quartz.runkQuartz">
            <property name="daoRepo">
                <ref bean="daoRepo"/>
            </property>
        </bean>
       <!--  注册定时器信息  --> 
        <bean id="taskInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
     <!-- 防止定时任务冲突执行,延迟作用 -->   
        <property name="concurrent" value="false" />
       <!--   指定要执行的定时任务类  这里是runkQuartz  --> 
        <property name="targetObject">  
        <ref local="runkQuartz"/>  
        </property>  
        <!--  指定定时器任务类要执行的方法名称 这里是execute   --> 
        <property name="targetMethod">  
        <value>run</value>  
        </property>  
        </bean>    
      <!-- 配置定时器任务的调度器    -->   
        <bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <!-- 声明要运行的实体   -->  
        <property name="jobDetail">  
            <ref bean="taskInfo"/>  
        </property>  
        <!-- 设置运行时间   -->  
        <property name="cronExpression">  
        <!--  每天零点--> 
           <value>0 0 0 * * ?</value> 
       <!--  每1分钟执行一次-->   
        <!--  <value>0 */1 * * * ?</value>   -->
        </property>  
        </bean>  
       <!-- 周定时器 -->   
        <bean id="weekRunkQuartz" class="com.idazui.lobby.quartz.weekRunkQuartz">
            <property name="daoRepo">
                <ref bean="daoRepo"/>
            </property>
        </bean>
         <bean id="weekinfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
         <!-- 防止定时任务冲突执行,延迟作用 --> 
        <property name="concurrent" value="false" />
         <!-- 指定要执行的定时任务类  这里是runkQuartz   --> 
        <property name="targetObject">  
        <ref local="weekRunkQuartz"/>  
        </property>  
         <!-- 指定定时器任务类要执行的方法名称 这里是execute    -->
        <property name="targetMethod">  
        <value>run</value>  
        </property>  
        </bean>  
     <bean id="weekrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">  
              <!--  声明要运行的实体  -->    
        <property name="jobDetail">  
            <ref bean="weekinfo"/>  
        </property>  
             <!-- 设置运行时间   --> 
         <property name="cronExpression">  
               <!--  每周日零点 -->  
                 <!-- <value>*/5 * * * * ?</value> -->
                   <value>0 0 0 ? * MON</value>
                   <!-- <value>0 0 0 ? * WED *</value>  -->
                  <!--  <value>0 59 23 ? * WED</value> -->
        </property>  
        </bean>    
                <!-- 月定时器 -->  
        <bean id="monthRunkQuartz" class="com.idazui.lobby.quartz.monthRunkQuartz">
            <property name="daoRepo">
                <ref bean="daoRepo"/>
            </property>
        </bean>
         <bean id="monthinfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
         <!-- 防止定时任务冲突执行,延迟作用 --> 
        <property name="concurrent" value="false" />
         <!-- 指定要执行的定时任务类  这里是runkQuartz   --> 
        <property name="targetObject">  
        <ref bean="monthRunkQuartz"/>  
        </property>  
        <!--  指定定时器任务类要执行的方法名称 这里是execute   --> 
        <property name="targetMethod">  
        <value>run</value>  
        </property>  
        </bean>  
         <bean id="monthrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">  
         <!-- 声明要运行的实体   --> 
        <property name="jobDetail">  
            <ref bean="monthinfo"/>  
        </property>  
               <!--  设置运行时间  -->
               <property name="cronExpression">  
         <!--  相当于每月第一天零点--> 
         <!--  <value>0 0 0 L * ? *</value> -->
         <!-- 每月最后一天23:59 -->
         <!-- <value>0 59 23 L * ?</value> -->
         <!-- 每月一号零点 -->
         <value>0 0 0 1 * ?</value>
        </property>  
        </bean> 
        <!-- 心跳监听定时器 -->  
        <bean id="tokenQuartz" class="com.idazui.lobby.quartz.validUserToken">
            <property name="daoRepo">
                <ref bean="daoRepo"/>
            </property>
        </bean>
         <bean id="tokeninfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
         <!-- 防止定时任务冲突执行,延迟作用 --> 
        <property name="concurrent" value="false" />
         <!-- 指定要执行的定时任务类  这里是runkQuartz   --> 
        <property name="targetObject">  
        <ref bean="tokenQuartz"/>  
        </property>  
        <!--  指定定时器任务类要执行的方法名称 这里是execute   --> 
        <property name="targetMethod">  
        <value>run</value>  
        </property>  
        </bean>  
         <bean id="tokenrunk" class="org.springframework.scheduling.quartz.CronTriggerBean">  
         <!-- 声明要运行的实体   --> 
        <property name="jobDetail">  
            <ref bean="tokeninfo"/>  
        </property>  
               <!--  设置运行时间  -->
               <property name="cronExpression">  
         <!-- 每10秒执行一次--> 
         <value>0/10 * * * * ?</value>
        </property>  
        </bean> 
        
        <!-- 这个类用来做需要完成的业务-->  
        <bean id="doAutoPush" class="com.idazui.lobby.service.DoAutoPush">
        <property name="daoRepo">
                <ref bean="daoRepo"/>
            </property>
        </bean>  
        <!-- 定时任务 -->  
        <!-- 定义调用对象和调用对象的方法,这个配置和普通的一样的 -->  
        <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
            <!-- 调用的类  -->  
            <property name="targetObject">  
                <ref bean="doAutoPush" />  
            </property>  
            <!-- 调用类中的方法  -->  
            <property name="targetMethod">  
                <value>autoPush</value>  
            </property>   
            <property  name ="concurrent"  value ="false"   />          
        </bean>  
        <!-- 定义触发时间 ,这边就不同了,这里必须将时间设置成无限长,因为我们要去读取数据库的时间来做为定时器的触发时间-->  
        <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
            <property name="jobDetail">  
                <ref bean="jobtask" />  
            </property>  
            <!-- cron表达式  -->  
            <property name="cronExpression">  
                <!-- cron将时间设置成无限长  -->  
                <value>1 0 0 1 1 ? 2099</value>  
            </property>  
        </bean>  
        
       <!--  注册监听器   -->  
        <bean id="registerQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <!--  注册定时器实体 集合  -->  
        <property name="triggers">  
            <list>  
                  <ref bean="quartzTrigger"/>   
                   <ref bean="weekrunk"/>  
                     <ref bean="monthrunk"/> 
                    <ref bean="tokenrunk"/>  
                    <ref bean="cronTrigger"/> 
            </list>  
        </property>  
        </bean>   
       
              <!--这里就是这里,就这个配置搞了我一天,这个类是用来设置触发时间的,调用这个类的init的方法来进行对时间的配置--> 
               <!--这个对象一定要注入,这样类才能进行管理,还有在类型要用get set方法,不然会报错。  
                <property name="scheduler" ref="registerQuartz" />    -->  
       <bean id="pushServiceImpl" class="com.idazui.lobby.service.DoAutoPushServiceImpl" lazy-init="false" init-method="init">   
                <property name="scheduler" ref="registerQuartz" />  
        </bean>    
        </beans>  
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Random;
    import java.text.ParseException;
    
    import org.apache.log4j.Logger;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.springframework.scheduling.quartz.CronTriggerBean;
    import org.springframework.stereotype.Service;
    
    
    /** 
     * 功能说明:设置下发定时时间service接口实现类 
     *  
     * 创建人:wyb
     *  
     * 
     */  
    public class DoAutoPushServiceImpl{  
        protected Logger log = Logger.getLogger(getClass().getName());
        
         //这个是总管理类  
        private Scheduler scheduler;  
          
        public void init(){  
              
            try {  
                                      
                CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger",                         Scheduler.DEFAULT_GROUP);  
                String originConExpression = trigger.getCronExpression();  
                //以下几行用来测试时间用
               /* Date date=new Date();
                   SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                   SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                   String str = "17:03:00";  
                   String str2=df.format(date);
                   System.out.println(str2);
                   String bb=str2+" "+str;
                    Date shijian = rf.parse(bb);*/
                //从fan()方法获取规定时间段内的随机时间
                Date shijian=fan();
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                String strDate = format.format(shijian).substring(11, 19);  
                //因为是要每天做一次定时任务,所以我截取了字符串进行了拼接格式  
                               String[] strTime = strDate.split(":");  
                String pushTime =  strTime[2]+" "+strTime[1]+" "+strTime[0]+" * * ? ";  
                //以下就是重新对时间的设置,这样就可以达到动态设置效果。  
                trigger.setCronExpression(pushTime);  
                scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger);  
            } catch (SchedulerException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (ParseException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
      
      
      
      
       /* private String getCronExceptionDB() throws ParseException{  
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                long timeNow= System.currentTimeMillis()/1000;
                long timeLose=(System.currentTimeMillis()+2*60*60*1000)/1000;
                //long timeLose=System.currentTimeMillis()+2*60*60*1000;
                System.out.println(timeNow+"  "+timeLose);                                               
                String dateNow=sdf.format(new Date((timeNow)*1000));
                Date shijian=fan();
                String ti=getCron(shijian);
                return ti;
            }*/
            /*** 
             *  
             * @param date 
             * @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss 
             * @return 
             */  
            public static String formatDateByPattern(Date date,String dateFormat){  
                SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);  
                String formatTimeStr = null;  
                if (date != null) {  
                    formatTimeStr = sdf.format(date);  
                }  
                return formatTimeStr;  
            }  
            /*** 
             * convert Date to cron ,eg.  "0 06 10 15 1 ? 2014" 
             * @param date  : 时间点 
             * @return 
             */  
            public  String getCron(java.util.Date  date){  
                String dateFormat="ss mm HH dd MM ? yyyy";  
                return formatDateByPattern(date, dateFormat);  
            }  
            public Date fan() throws ParseException{
               /* Date date=new Date();
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String str = "06:00:00";  
                String str2=df.format(date);
                System.out.println(str2);
                String bb=str2+" "+str;
                 Date today = rf.parse(bb);  */
                log.debug("进入随机时间方法");
                Date today=timec();
                   log.debug("时间格式:"+today);
               return today;
           }
            public  Date timec() throws ParseException{
                Date date=new Date();
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                   SimpleDateFormat rf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                  //时间段开始
                   String str = "06:00:00";  
                   String str2=df.format(date);
                String bb=str2+" "+str;
                Date one=rf.parse(bb);
                long timeone=(one.getTime())/1000;
           /*     System.out.println(timeone);
                System.out.println((timeone)/1000);*/
                //时间段结束
                String strone = "12:00:00";  
                   String strtwo=df.format(date);
                String two=strtwo+" "+strone;
                Date newdate=rf.parse(two);
                long timetwo=(newdate.getTime())/1000;
               /* System.out.println(timetwo);
                System.out.println((timetwo)/1000);*/
                Random ra=new Random();
                int onenum=(int)timetwo;
                int twonum=(int)timeone;
                int three=onenum-twonum;
               /* System.out.println(onenum+"  **");
                System.out.println(twonum+"  ^^");*/
               int result=ra.nextInt(three)+twonum;
                   //System.out.println(result);
                   Date ndate=new Date((result)*1000L);
                   log.debug("最终获取时间为:"+ndate);
            return ndate;     
            }
            public Scheduler getScheduler() {  
                return scheduler;  
            }  
          
            public void setScheduler(Scheduler scheduler) {  
                this.scheduler = scheduler;  
            }  
     
    }  
    import java.io.File;
    import java.math.BigDecimal;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.log4j.Logger;
    
    
    public class DoAutoPush {
        private static Logger m_logger = Logger.getLogger(DoAutoPush.class);
        private DaoRepo daoRepo;
        public DaoRepo getDaoRepo() {
            return daoRepo;
        }
        public void setDaoRepo(DaoRepo daoRepo) {
            this.daoRepo = daoRepo;
        }
        public void autoPush(){
            System.out.println("成功了");
        }
    
    }
  • 相关阅读:
    Asp.net性能优化总结(一)
    Visual C#常用函数和方法集汇总
    ASP.net下大文件上传的解决方案及WebbUpload组件源码
    正则表达式学习
    在Asp.net中为图像加入版权信息
    Cognos 维度函数
    Cognos8.3函数使用手册(二)
    cognos更新步聚
    Cognos8.3函数使用手册(一)
    Cognos 8 报表备份和恢复
  • 原文地址:https://www.cnblogs.com/emperorking/p/7161043.html
Copyright © 2011-2022 走看看