Quartz存储与持久化-基于Spring的配置

来源:互联网 发布:网络获客 编辑:程序博客网 时间:2024/06/05 10:34

   在上文【Quartz】Quartz存储与持久化-基于quartz.properties的配置 ,是通过配置quartz.properties文件的方式来实现持久化的。本文将通过spring配置的方式来实现存储与持久化。

1、同上文一样,要先创建相关的数据表,并新建一个Java工程,并导入相关的包,整个工程目录 如下:



2、创建Job类

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.mucfc;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Date;  
  4. import org.apache.log4j.Logger;  
  5. import org.quartz.Job;  
  6. import org.quartz.JobExecutionContext;  
  7. import org.quartz.JobExecutionException;  
  8. public class MyJob implements Job{  
  9.     private static final Logger logger = Logger.getLogger(MyJob.class);    
  10.     @Override  
  11.     public void execute(JobExecutionContext context)  
  12.             throws JobExecutionException {  
  13.         System.out.println("Hello quzrtz  "+  
  14.                 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ").format(new Date()));  
  15.           
  16.     }  
  17.   
  18. }  

3、创建一个调度类

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.mucfc;  
  2. import java.text.ParseException;  
  3. import java.util.List;  
  4.   
  5. import org.apache.commons.lang.StringUtils;  
  6. import org.quartz.CronScheduleBuilder;  
  7. import org.quartz.Job;  
  8. import org.quartz.JobBuilder;  
  9. import org.quartz.JobDetail;  
  10. import org.quartz.JobKey;  
  11. import org.quartz.Scheduler;  
  12. import org.quartz.SchedulerException;  
  13. import org.quartz.SchedulerFactory;  
  14. import org.quartz.SimpleScheduleBuilder;  
  15. import org.quartz.SimpleTrigger;  
  16. import org.quartz.Trigger;  
  17. import org.quartz.TriggerBuilder;  
  18. import org.quartz.TriggerKey;  
  19. import org.quartz.impl.StdSchedulerFactory;  
  20. import org.springframework.beans.factory.annotation.Autowired;  
  21. import org.springframework.context.ApplicationContext;  
  22. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  23. import org.springframework.stereotype.Component;  
  24. @Component  
  25. public class QuartzTest {  
  26.     @Autowired  
  27.     private Scheduler scheduler;  
  28.     private static String JOB_GROUP_NAME = "ddlib";  
  29.     private static String TRIGGER_GROUP_NAME = "ddlibTrigger";  
  30.     /** 
  31.      * 开始一个simpleSchedule()调度 
  32.      */  
  33.     public void startSchedule() {  
  34.         try {  
  35.             // 1、创建一个JobDetail实例,指定Quartz  
  36.             JobDetail jobDetail = JobBuilder.newJob(MyJob.class)  
  37.             // 任务执行类  
  38.                     .withIdentity("job1_1""jGroup1")  
  39.                     // 任务名,任务组  
  40.                     .build();  
  41.             // 2、创建Trigger  
  42.             SimpleScheduleBuilder builder = SimpleScheduleBuilder  
  43.                     .simpleSchedule()  
  44.                     // 设置执行次数  
  45.                     .repeatSecondlyForTotalCount(10);  
  46.             Trigger trigger = TriggerBuilder.newTrigger()  
  47.                     .withIdentity("trigger1_1""tGroup1").startNow()  
  48.                     .withSchedule(builder).build();  
  49.             // 3、创建Scheduler  
  50.             scheduler.start();  
  51.             // 4、调度执行  
  52.             scheduler.scheduleJob(jobDetail, trigger);  
  53.             try {  
  54.                 Thread.sleep(60000);  
  55.             } catch (InterruptedException e) {  
  56.                 e.printStackTrace();  
  57.             }  
  58.   
  59.             scheduler.shutdown();  
  60.   
  61.         } catch (SchedulerException e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.     }  
  65.   
  66.     /** 
  67.      * 从数据库中找到已经存在的job,并重新开户调度 
  68.      */  
  69.     public  void resumeJob() {  
  70.         try {  
  71.             // ①获取调度器中所有的触发器组  
  72.             List<String> triggerGroups = scheduler.getTriggerGroupNames();  
  73.             // ②重新恢复在tgroup1组中,名为trigger1_1触发器的运行  
  74.             for (int i = 0; i < triggerGroups.size(); i++) {  
  75.                 List<String> triggers = scheduler.getTriggerGroupNames();  
  76.                 for (int j = 0; j < triggers.size(); j++) {  
  77.                     Trigger tg = scheduler.getTrigger(new TriggerKey(triggers  
  78.                             .get(j), triggerGroups.get(i)));  
  79.                     // ②-1:根据名称判断  
  80.                     if (tg instanceof SimpleTrigger  
  81.                             && tg.getDescription().equals("tgroup1.trigger1_1")) {  
  82.                         // ②-1:恢复运行  
  83.                         scheduler.resumeJob(new JobKey(triggers.get(j),  
  84.                                 triggerGroups.get(i)));  
  85.                     }  
  86.                 }  
  87.   
  88.             }  
  89.             scheduler.start();  
  90.         } catch (Exception e) {  
  91.             e.printStackTrace();  
  92.   
  93.         }  
  94.     }  
  95. }  

4、beans.xml文件配置

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  7.     http://www.springframework.org/schema/context     
  8.     http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  9.     http://www.springframework.org/schema/task    
  10.     http://www.springframework.org/schema/task/spring-task-3.0.xsd">  
  11.          <!-- 自动扫描注解的bean -->  
  12.     <context:component-scan base-package="com.mucfc"/>  
  13.       
  14.     <context:property-placeholder location="classpath:jdbc.properties" />  
  15.     <bean id="quartzDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >  
  16.         <!-- <property name="driverClass" value="${quartz.driverClassName}"/>  
  17.         <property name="jdbcUrl" value="${quartz.url}"/>  
  18.         <property name="user"  value="${quartz.username}"/>  
  19.         <property name="password" " value="${quartz.password}"/>  
  20.         <property name="minPoolSize"  value="${quartz.minPoolSize}"/>  
  21.         <property name="initialPoolSize" value="${quartz.initialPoolSize}"/> -->   
  22.   
  23.        <property name="driverClassName" value="${quartz.driverClassName}"/>    
  24.         <property name="url" value="${quartz.url}"/>    
  25.         <property name="username" value="${quartz.username}"/>    
  26.         <property name="password" value="${quartz.password}"/>     
  27.     </bean>  
  28.   
  29.       
  30.     <!-- quartz持久化存储  -->   
  31.     <bean name="quartzScheduler"  
  32.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  33.         <property name="dataSource">  
  34.             <ref bean="quartzDataSource" />  
  35.         </property>  
  36.         <property name="applicationContextSchedulerContextKey" value="applicationContext" />  
  37.         <property name="quartzProperties">  
  38.         <props>  
  39.          <prop key="org.quartz.scheduler.instanceName">CRMscheduler</prop>  
  40.             <prop key="org.quartz.scheduler.instanceId">AUTO</prop>  
  41.             <!-- 线程池配置 -->  
  42.             <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>  
  43.             <prop key="org.quartz.threadPool.threadCount">20</prop>  
  44.             <prop key="org.quartz.threadPool.threadPriority">5</prop>  
  45.             <prop key="org.quartz.jobStore.misfireThreshold">120000</prop>  
  46.             <!-- JobStore 配置 -->  
  47.             <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>  
  48.             <!-- 集群配置 -->  
  49.             <prop key="org.quartz.jobStore.isClustered">true</prop>  
  50.             <prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>  
  51.             <prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>                   
  52.                <!-- 数据表设置 -->  
  53.             <prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop>  
  54.             <prop key="org.quartz.jobStore.dataSource">qzDS</prop>  
  55.         </props>         
  56.         </property>  
  57.     </bean>    
  58. </beans>  
其中数据源jdbc.properties:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. ############quartz db########################    
  2. quartz.driverClassName=com.mysql.jdbc.Driver    
  3. quartz.url=jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true    
  4. quartz.username=root  
  5. quartz.password=christmas258@  
  6. quartz.minPoolSize=7    
  7. quartz.initialPoolSize=12  

5、测试类

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.mucfc;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4. public class Test {  
  5.     public static void main(String[] args) {  
  6.         ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");  
  7.      QuartzTest quartzTest=context.getBean("quartzTest",QuartzTest.class);  
  8.              quartzTest.startSchedule();  
  9.              //quartzTest.resumeJob();  
  10.   
  11.     }  
  12.   
  13. }  

输出结果:


查看数据表

停止程序,语句改成:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //quartzTest.startSchedule();  
  2. uartzTest.resumeJob();  
然后就可以发现任务接着运行了,运行完成完之后自动从数据表中删除:



项下载地址

0 0
原创粉丝点击