• Spring整合Quartz


    • Spring整合Quartz

      前面已经介绍了Quartz框架,这次我们使用Spring整合Quartz开发,本实例采用数据库模式的demo。

      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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
              http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd
                 http://www.springframework.org/schema/util
                 http://www.springframework.org/schema/util/spring-util.xsd">
      
      
          <!--加载数据库连接的配置文件-->
          <!--<context:property-placeholder location="jdbc.properties"></context:property-placeholder>-->
          <!-- c3p0:数据源配置  -->
          <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
              <property name="driverClass" value="com.mysql.jdbc.Driver"/>
              <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/quartz?Unicode=true&amp;characterEncoding=UTF-8"/>
              <property name="user" value="root"/>
              <property name="password" value="root"/>
              <property name="initialPoolSize" value="3"/>
              <property name="minPoolSize" value="2"/>
              <property name="maxPoolSize" value="10"/>
              <property name="maxIdleTime" value="60"/>
              <property name="acquireRetryDelay" value="1000"/>
              <property name="acquireRetryAttempts" value="10"/>
              <property name="preferredTestQuery" value="SELECT 1"/>
          </bean>
          
          <bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
              <property name="dataSource" ref="dataSource"></property>
              <property name="configLocation" value="quartz.properties"></property>
              <!--   <property name="triggers"></property>-->
          </bean>
      
      
      </beans>
      
      public class SimpleJob extends QuartzJobBean {
      
      
          @Override
          protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
              System.out.println(new Date()+"执行SimpleJob");
          }
      
      }
      
      public class ApplicationContextTest {
      
          public static Scheduler scheduler;
          
          public static void main(String[] args) throws Exception {
      
      
              ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext-trigger.xml");
              scheduler = (Scheduler) applicationContext.getBean("quartzScheduler");
              //SimpleJob simpleJob = new SimpleJob();
          
              scheduler.start();
          
              //从数据库中获取相应的job及调度信息
              //JobDetail jobDetail = scheduler.getJobDetail(new JobKey("trigger1", "trigger1"));
              //resumeJob(jobDetail.getKey().getName(), jobDetail.getKey().getGroup());
              //添加job执行
              addJob("trigger1", "trigger1", "job1", "job2", "0/20 * * * * ?", SimpleJob.class, new HashMap<>());
              Thread.sleep(60 * 1000);
              //重新设置调度时间
              System.out.println("重新设置调度时间");
              rescheduleJob("trigger1","trigger1","0/10 * * * * ?");
          
              Thread.sleep(60 * 1000);
              //暂停调度
              System.out.println("暂停调度");
              pauseJob("trigger1","trigger1");
          
              Thread.sleep(60 * 1000);
              System.out.println("恢复调度");
              resumeJob("trigger1","trigger1");
          
              Thread.sleep(60 * 1000);
              System.out.println("删除调度");
              removeJob("trigger1","trigger1");
              Thread.sleep(60 * 1000);
          
              System.out.println(scheduler);
          }
          
          /**
           * 添加job执行
           *
           * @param triggerKeyName
           * @param triggerKeyGroup
           * @param jobName
           * @param jobGroup
           * @param cronExpression
           * @param jobClass
           * @param jobData
           * @return
           * @throws Exception
           */
          public static boolean addJob(String triggerKeyName, String triggerKeyGroup, String jobName, String jobGroup, String cronExpression,
                                       Class<? extends Job> jobClass, Map<String, Object> jobData) throws Exception {
          
              JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(triggerKeyName, triggerKeyGroup).build();
          
              Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).withIdentity(triggerKeyName, triggerKeyGroup).build();
              if (jobData != null && jobData.size() > 0) {
                  JobDataMap jobDataMap = jobDetail.getJobDataMap();
                  jobDataMap.putAll(jobData);    // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
              }
          
              scheduler.scheduleJob(jobDetail, trigger);
      
      //        if (!scheduler.isShutdown()) {
      //            scheduler.start();
      //        }
      
              return true;
      
      
          }
          
          /**
           * 重新设置job执行
           * @param triggerKeyName
           * @param triggerKeyGroup
           * @param cronExpression
           * @return
           * @throws SchedulerException
           */
          public static boolean rescheduleJob(String triggerKeyName, String triggerKeyGroup, String cronExpression) throws SchedulerException {
              TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup);
          
              if (scheduler.checkExists(triggerKey)) {
                  Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).withIdentity(triggerKey).build();
                  scheduler.rescheduleJob(triggerKey, trigger);
              }
          
              return true;
          }
      
      
          /**
           * 删除job
           * @param triggerKeyName
           * @param triggerKeyGroup
           * @return
           * @throws SchedulerException
           */
          public static boolean removeJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException {
              // TriggerKey : name + group
          
              TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup);
          
              boolean result = false;
              if (scheduler.checkExists(triggerKey)) {
                  result = scheduler.unscheduleJob(triggerKey);
              }
          
              return result;
          }
          
          /**
           * 暂停job
           * @param triggerKeyName
           * @param triggerKeyGroup
           * @return
           * @throws SchedulerException
           */
          public static boolean pauseJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException {
              // TriggerKey : name + group
          
              TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup);
          
              boolean result = false;
              if (scheduler.checkExists(triggerKey)) {
                  scheduler.pauseTrigger(triggerKey);
                  result = true;
          
              } else {
          
              }
              return result;
          }
          
          /**
           * 重启job
           * @param triggerKeyName
           * @param triggerKeyGroup
           * @return
           * @throws SchedulerException
           */
          public static boolean resumeJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException {
          
              TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup);
          
              boolean result = false;
              if (scheduler.checkExists(triggerKey)) {
                  scheduler.resumeTrigger(triggerKey);
                  result = true;
          
              } else {
          
              }
              return result;
          }
      
      
      }
      

      quart.properties的配置信息跟上一篇的配置信息基本一致,然后点击运行即可。

      本实例中当运行的任务在暂停的情况下,一旦重新恢复,会将暂停期间的任务运行如图:

    源码链接: https://github.com/albert-liu435/springquartz

  • 相关阅读:
    HTML Style Sheet
    Chrome 崩溃 相关
    android dialog 不变暗
    URL replacement
    android SharedPreferences
    android PreferenceActivity
    据说还可以的网站
    android brightness control
    Android network status 3G/WIFI
    android activity onSearchRequested()
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/12218767.html
Copyright © 2020-2023  润新知