动态启动,暂定,添加,删除定时功能,可传参数

来源:互联网 发布:天音淘宝复制大师侵權 编辑:程序博客网 时间:2024/06/18 06:07

动态启动,暂定,添加,删除定时功能,可传参数
Spring中使用Quartz的3种方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean)
以下介绍一下实现job接口的方法,通过此方法可以动态启动,暂定,添加,删除定时功能,可传参数。
所有数据全部持久化到数据表中,不再需要XML配置文件存储数据。quartz已经封装了持久化方法。数据表用的MYSQL见附件
配置quartz. properties
Java代码
#============================================================================  
# Configure Main Scheduler Properties    
#============================================================================  
   
org.quartz.scheduler.instanceName = TestScheduler  
org.quartz.scheduler.instanceId = AUTO  
   
#============================================================================  
# Configure ThreadPool    
#============================================================================  
   
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
org.quartz.threadPool.threadCount = 5 
org.quartz.threadPool.threadPriority = 4 
   
#============================================================================  
# Configure JobStore    
#============================================================================  
   
org.quartz.jobStore.misfireThreshold = 60000 
   
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  
   
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
##org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate  
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate  
org.quartz.jobStore.dataSource = myDS  
org.quartz.jobStore.tablePrefix = QRTZ_  
org.quartz.jobStore.isClustered = false 
   
#============================================================================  
# Configure Datasources    
#============================================================================  
   
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver  
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8  
org.quartz.dataSource.myDS.user = root  
org.quartz.dataSource.myDS.password =   
org.quartz.dataSource.myDS.maxConnections = 5 
   
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver  
#org.quartz.dataSource.myDS.URL = jdbc:postgresql:dev  
#org.quartz.dataSource.myDS.user = jhouse  
#org.quartz.dataSource.myDS.password =   
#org.quartz.dataSource.myDS.maxConnections = 5 
   
#============================================================================  
# Configure Plugins   
#============================================================================  
   
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin  
 
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin  
# init plugin will load jobs.xml as a classpath resource i.e. /jobs.xml if not found on file system  
#org.quartz.plugin.jobInitializer.fileName=jobs.xml  
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false 
#org.quartz.plugin.jobInitializer.failOnFileNotFound = false 

#============================================================================
# Configure Main Scheduler Properties 
#============================================================================

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO

#============================================================================
# Configure ThreadPool 
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 4

#============================================================================
# Configure JobStore 
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
##org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false

#============================================================================
# Configure Datasources 
#============================================================================

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password =
org.quartz.dataSource.myDS.maxConnections = 5

#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
#org.quartz.dataSource.myDS.URL = jdbc:postgresql:dev
#org.quartz.dataSource.myDS.user = jhouse
#org.quartz.dataSource.myDS.password =
#org.quartz.dataSource.myDS.maxConnections = 5

#============================================================================
# Configure Plugins
#============================================================================

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
# init plugin will load jobs.xml as a classpath resource i.e. /jobs.xml if not found on file system
#org.quartz.plugin.jobInitializer.fileName=jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
#org.quartz.plugin.jobInitializer.failOnFileNotFound = false
在这里采用JobStoreTX,将任务持久化到数据中,而不再是简单的内存方式:RAMJobStore
在XML里加入:
在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化。
Xml代码
<servlet> 
      <servlet-name> 
          QuartzInitializer  
      </servlet-name> 
      <servlet-class> 
          org.quartz.ee.servlet.QuartzInitializerServlet  
      </servlet-class> 
      <init-param> 
          <param-name>config-file</param-name> 
          <param-value>/quartz.properties</param-value> 
      </init-param> 
      <init-param> 
          <param-name>shutdown-on-unload</param-name> 
          <param-value>true</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
  </servlet> 

   <servlet>
         <servlet-name>
             QuartzInitializer
         </servlet-name>
         <servlet-class>
             org.quartz.ee.servlet.QuartzInitializerServlet
         </servlet-class>
         <init-param>
             <param-name>config-file</param-name>
             <param-value>/quartz.properties</param-value>
         </init-param>
         <init-param>
             <param-name>shutdown-on-unload</param-name>
             <param-value>true</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>

Java代码
public interface TimerService  
{  
    public void setJobName(String jobName);  
 
    public void setJobGroup(String jobGroup);  
      
    public void setClassName(String string);  
      
    public void setCronExpression(String cronExpression);  
 
    public void setParameterNames(String[] strings);  
 
    public void setParameterValues(String[] strings);  
      
    /** 
     * 设置定时时间 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     * @param triggerName 
     * @param triggerGroup 
     * @param cronExpression 
     */ 
    void saveCron(HttpServletRequest request,String jobName,String jobGroup,String triggerName,String triggerGroup,String cronExpression) throws SchedulerException, ParseException;  
      
    /** 
     * 删除定时器 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     */ 
    void deleteTimer(HttpServletRequest request,String jobName,String jobGroup) throws SchedulerException;  
      
    /** 
     * 立即执行定时功能 
     * @param request 
     * @param jobName 
     * @param jobGroup 
     */ 
    void runNowTimer(HttpServletRequest request,String jobName,String jobGroup) throws SchedulerException;  
      
    /** 
     * 根据名称和组别暂停Tigger 
     * @param triggerName 
     * @param group 
     */ 
    void pauseTrigger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
      
    /** 
     * 恢复Trigger 
     * @param triggerName 
     * @param group 
     */ 
    void resumeTrigger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
      
    /** 
     * 删除Trigger 
     * @param triggerName 
     * @param group 
     */ 
    boolean removeTrigdger(HttpServletRequest request,String triggerName,String group) throws SchedulerException;  
}  
 
public class TimerServiceImpl implements TimerService  
{  
    private ApplicationContext appCtx = null;  
    private Scheduler scheduler;  
    private String jobName = "";  
    private String jobGroup ="";  
    private String className = "";  
    private String cronExpression = "";  
    private String parameterNames[] = {};  
    private String parameterValues[] = {};  
    private JobDetail jobDetail = new JobDetail();  
 
    public String getJobName() {  
        return jobName;  
    }  
 
    public void setJobName(String jobName) {  
        this.jobName = jobName;  
    }  
 
    public String getJobGroup() {  
        return jobGroup;  
    }  
 
    public void setJobGroup(String jobGroup) {  
        this.jobGroup = jobGroup;  
    }  
 
    public String getClassName() {  
        return className;  
    }  
 
    public void setClassName(String string) {  
        className = string.trim();  
    }  
 
    public String getCronExpression() {  
        return cronExpression;  
    }  
      
    public void setCronExpression(String cronExpression) {  
        this.cronExpression = cronExpression;  
    }  
      
    public JobDetail getJobDetail() {  
        return jobDetail;  
    }  
 
    public void setJobDetail(JobDetail detail) {  
        jobDetail = detail;  
    }  
 
    public String[] getParameterNames() {  
        return parameterNames;  
    }  
 
    public String[] getParameterValues() {  
        return parameterValues;  
    }  
 
    public void setParameterNames(String[] strings) {  
        parameterNames = strings;  
    }  
 
    public void setParameterValues(String[] strings) {  
        parameterValues = strings;  
    }  
 
    public void saveTimer(HttpServletRequest request, String[] parameterNames,String[] parameterValues,JobDetail jobDetail)   
       throws SchedulerException, ClassNotFoundException   
    {  
        className = jobDetail.getJobClass().getName();  
        Class jobClass = Class.forName(className);  
        jobDetail.setJobClass(jobClass);      
        for (int i =0; i < parameterNames.length; i++) {  
            if (parameterNames[i].trim().length() > 0 && parameterValues[i].trim().length() > 0) {  
                jobDetail.getJobDataMap().put(parameterNames[i].trim(), parameterValues[i].trim());  
                jobDetail.getJobDataMap().put(parameterNames[i].trim(), parameterValues[i].trim());  
            }  
        }  
        boolean replace = true;  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.addJob(jobDetail, replace);  
    }  
 
    public void saveCron(HttpServletRequest request, String jobName, String jobGroup, String triggerName  
       , String triggerGroup, String cronExpression) throws SchedulerException, ParseException   
    {  
        CronTrigger trigger = null;  
        if (cronExpression.length() > 2) {  
            trigger = new CronTrigger(triggerName,triggerGroup,jobName,jobGroup,cronExpression);  
        }  
        trigger.setVolatility(false);  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.scheduleJob(trigger);  
    }  
      
    public void deleteTimer(HttpServletRequest request, String jobName,String jobGroup) throws SchedulerException   
    {  
        this.jobDetail = scheduler.getJobDetail(jobName, jobGroup);  
        if(this.jobDetail!=null){  
            scheduler = ScheduleBase.getCurrentScheduler(request);  
            scheduler.deleteJob(jobName, "DEFAULT");  
        }  
    }  
 
    public void runNowTimer(HttpServletRequest request, String jobName,String jobGroup) throws SchedulerException   
    {  
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.triggerJob(jobName, jobGroup);  
    }  
      
    public void pauseTrigger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {     
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.pauseTrigger(triggerName, group);//停止触发器  
    }  
      
    public void resumeTrigger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {         
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        //Trigger trigger = scheduler.getTrigger(triggerName, group);  
        scheduler.resumeTrigger(triggerName, group);//重启触发器  
    }  
      
    public boolean removeTrigdger(HttpServletRequest request, String triggerName,String group) throws SchedulerException  
    {         
        scheduler = ScheduleBase.getCurrentScheduler(request);  
        scheduler.pauseTrigger(triggerName, group);//停止触发器  
        return scheduler.unscheduleJob(triggerName, group);//移除触发器  
    }  
      
    public void timerDataJob(JobExecutionContext context)   
    {  
    }  
}  
//实现job接口才能定时运行  
public class TimerDataJob implements Job  
{  
 
    private ApplicationContext appCtx = null;  
    private TimerService timerService = null;  
    public void execute(JobExecutionContext context)  
            throws JobExecutionException  
    {  
        try {  
            Map parameters=context.getJobDetail().getJobDataMap();  
            String str = (String)parameters.get("");//通过此方法获得需要的参数  
            appCtx = ApplicationContextKeeper.getAppCtx();//servlet类,项目启动时讲配置文件读入  
            timerService = (TimerService)appCtx.getBean("timerService");  
            System.out.println("----------定时结束-----------");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新开的店铺没有销量怎么办 淘宝的商品权重下降是怎么办 360n5手机耗电快怎么办 怪兽充电宝丢了怎么办 有已处置的评价怎么办 淘宝降权了怎么办2018 使用虚假广告词被工商查到怎么办 为什么手机淘宝店关注不了怎么办 淘宝买东西付钱后卖家不发货怎么办 微信销售群没人买东西怎么办 淘宝想开2个店铺怎么办 拼多多没钱交保证金怎么办 差评一个月后怎么办 淘宝买家投诉成立后怎么办 天猫投诉成立了怎么办 新开实体店铺没生意怎么办 新开淘宝没流量怎么办 白色板鞋有青草弄的绿色怎么办 淘宝租衣服不退押金怎么办 c盘不可以扩展怎么办 实践教学管理平台忘记账号怎么办 淘宝申请售后店家不处理怎么办 全民k歌地区限制怎么办 网络电视hdp无法下载怎么办 淘宝店铺销量为零怎么办 快递号填错卖家拒绝退款申请怎么办 淘宝店代购 售假怎么办 淘宝申请售后卖家没钱怎么办 淘宝禁止评价一个月怎么办 被卖家电话骚扰怎么办 恶意骚扰扣12分怎么办 新店开张交保证金被骗了怎么办 支付宝蚂蚁花呗逾期怎么办 被注销的微信怎么办 花呗有些不能用怎么办 实体店生意不好做怎么办 电器实体店生意越来越差怎么办 开业第一天不吉利怎么办 美容店开业第一天没人怎么办 淘宝店铺没有人访问怎么办 淘宝店铺没有人问怎么办