Spring整合Quartz开发代码实例

作者:海之浪子 时间:2022-03-12 16:37:26 

我们使用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正常配置信息,然后点击运行即可。

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

Spring整合Quartz开发代码实例

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

来源:https://www.cnblogs.com/haizhilangzi/p/12218767.html

标签:Spring,整合,Quartz,开发
0
投稿

猜你喜欢

  • C#中重载相等(==)运算符示例

    2023-01-11 15:10:36
  • Java JDK 二分法 分析demo(推荐)

    2022-02-28 23:29:21
  • IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    2022-08-25 13:57:53
  • Java后端Tomcat实现WebSocket实例教程

    2023-08-22 17:31:09
  • java 算法之归并排序详解及实现代码

    2021-12-27 01:52:11
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解决

    2022-07-12 13:33:08
  • springboot整合solr的方法详解

    2023-01-20 17:54:37
  • 通过java反射机制动态调用某方法的总结(推荐)

    2022-11-04 01:38:32
  • java线程池详解及代码介绍

    2023-09-16 07:21:57
  • windows下java环境变量的设置方法

    2022-12-01 03:13:14
  • Java实现时间日期格式转换示例

    2023-06-06 04:45:11
  • 详解java 客户端链接不上redis解决方案

    2023-11-12 10:12:15
  • SpringBoot Validation提示信息国际化配置方式

    2021-08-21 09:27:32
  • Java实现FTP上传到服务器

    2022-10-07 10:28:58
  • Spring声明式事务和@Aspect的拦截顺序问题的解决

    2023-07-18 12:10:46
  • Java中的同步与异步详细介绍

    2023-06-23 00:42:08
  • 举例详解用Java实现web分页功能的方法

    2021-07-27 10:50:19
  • java服务器的简单实现过程记录

    2023-01-18 06:44:34
  • 初识Java环境变量配置及IDEA

    2022-09-20 06:46:41
  • 基于struts2和hibernate实现登录和注册功能

    2022-03-23 00:27:43
  • asp之家 软件编程 m.aspxhome.com