spring整合quartz

1、导入依赖

	<properties>
        <springframework.version>5.1.6.RELEASE</springframework.version>
        <quartz.version>2.2.3</quartz.version>
    </properties>
     <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-tx</artifactId>
	      <version>${springframework.version}</version>
	    </dependency>
        <!--quartz 定时器-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>${quartz.version}</version>
        </dependency>
     </dependencies>

2、编写配置

定义任务:

方式一(推荐):MethodInvokingJobDetailFactoryBean
<!--quartz定时器  组合-->
        <bean id="MyJobDetail" class="com.zzc.job.JobMethodInvoke"/>
        <!--任务   job-->
        <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!-- 指定job的名称 -->
            <property name="name" value="job1"/>
            <!-- 指定job的分组 -->
            <property name="group" value="job_group1"/>
            <!--目标任务类-->
           <property name="targetBeanName" value="jobMethodInvoke"/>
           <!--具体目标方法-->
            <property name="targetMethod" value="doJob"/>
        </bean>
        
方式二:JobDetailFactoryBean
 <!--任务   job-->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <!-- 指定job的名称 -->
            <property name="name" value="job1"/>
            <!-- 指定job的分组 -->
            <property name="group" value="job_group1"/>
            <!-- 指定具体的job类 -->
            <property name="jobClass" value="com.zzc.job.MyJob"/>
        </bean>

要在调度器中手动注册service:

  <!-- 3.定义调度器,并将Trigger注册到调度器中 -->
        <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="schedulerContextAsMap">
                <map>
                    <!-- spring 管理的service需要放到这里,才能够注入成功 -->
                    <description>schedulerContextAsMap</description>
                    <entry key="userService" value-ref="userService"/>
                </map>
            </property>
            <!-- 添加 quartz 配置,-->
            <property name="configLocation" value="classpath:quartz.properties"></property>
            <!--将Trigger注册到调度器中-->
            <property name="triggers">
                <list>
                   <ref bean="cronTrigger"/>
                </list>
            </property>
        </bean>
配置触发器
      <!-- 2:定义触发器的bean,定义一个Cron的Trigger,一个触发器只能和一个任务进行绑定 -->
      <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <!-- 指定Trigger的名称 -->
          <property name="name" value="trigger1"/>
          <!-- 指定Trigger的名称 -->
          <property name="group" value="trigger_group1"/>
          <!-- 指定Trigger绑定的JobDetail -->
          <property name="jobDetail" ref="jobDetail"/>
          <!-- 指定Cron 的表达式 ,当前是每隔5s运行一次 -->
          <property name="cronExpression" value="*/5 * * * * ?" />
      </bean>
配置调度器:
       <!-- 3.定义调度器,并将Trigger注册到调度器中 -->
       <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
           <!-- 添加 quartz 配置,-->
           <property name="configLocation" value="classpath:quartz.properties"></property>
           <!--将Trigger注册到调度器中-->
           <property name="triggers">
               <list>
                  <ref bean="cronTrigger"/>
               </list>
           </property>
       </bean>

3、编写任务类

方式一(推荐)

直接编写自定义的任务类即可(对应上面定义任务的方式一)

JobMethodInvoke.java:

package com.zzc.job;

import com.zzc.pojo.User;
import com.zzc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * @author zhouzhicheng
 * @version 1.0  2020/12/28
 */
@Component
public class JobMethodInvoke {
    @Autowired
    private UserService userService;

    public JobMethodInvoke() {
        System.out.println("job初始化...");
    }
    public void doJob(){
        System.out.println("==============");
        System.out.println("执行任务: time"+new Date());
        List<User> allUser = userService.getAllUser();
        for (User user : allUser) {
            System.out.println(user);
        }
        System.out.println("==============");
    }
}

方式二

继承org.springframework.scheduling.quartz.QuartzJobBean编写任务类:

JobMethodInvoke.java:

package com.zzc.job;

import com.zzc.pojo.User;
import com.zzc.service.UserService;
import lombok.SneakyThrows;
import org.quartz.*;
import org.quartz.Job;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * @author zhouzhicheng
 * @version 1.0  2020/12/28
 */
@Component
public class MyJob extends QuartzJobBean {

    public MyJob() {
        super();
        System.out.println("JOB初始化");
    }
    @SneakyThrows
    @Override
    protected void executeInternal(JobExecutionContext context) {
        //获取JobExecutionContext中的service对象
        SchedulerContext schedulerContext = context.getScheduler().getContext();
        //这里的service就是通过配置文件 配置的
        UserService userService = (UserService) schedulerContext.get("userService");
        System.out.println("执行任务: time"+new Date());
        List<User> allUser = userService.getAllUser();
        for (User user : allUser) {
            System.out.println(user);
        }
    }
}

4、测试

package com.zzc.job;

import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.impl.StdScheduler;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author zhouzhicheng
 * @version 1.0  2020/12/28
 */
public class SpringQuartzTest {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println("=============");
        StdScheduler scheduler = (StdScheduler) app.getBean("scheduler");
        System.out.println(scheduler.getClass());
        // 暂停,恢复工作
        scheduler.pauseJob(JobKey.jobKey("job1","job_group1"));// 暂停工作
        Thread.sleep(3000);
        scheduler.resumeJob(JobKey.jobKey("job1","job_group1"));// 恢复工作

    }
}


注意:spring配置中定义任务的方式不同–>创建任务类的方式要相对应!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值