zoukankan      html  css  js  c++  java
  • 定时任务--查数据库--注解实现

    spring MVC 项目:

    1.接口继承Job
    package .quartz;

    import org.quartz.Job;

    public interface Task extends Job{

    }


    2.定义一个注解类
    package .quartz;

    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface TaskScheduled {

    /**
    * 触发时间
    *
    * @return
    */
    public String cron() default "0 0 23 * * ?";

    }

    3.定义TaskManager

    package .quartz;

    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.annotation.Resource;
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.TriggerKey;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.stereotype.Component;

    @Component
    @Lazy(value = false)
    public class TaskManager {

    @Autowired(required = false)
    private List<Task> taskList;

    @Resource(name = "quartzSchedulerNet")
    private Scheduler scheduler;

    @PostConstruct
    public void init() {
    try {
    if (taskList != null) {
    for (int i = 0; i < taskList.size(); i++) {
    Task task = taskList.get(i);
    String nameSuffix = task.getClass().getName();
    TriggerKey triggerKey = new TriggerKey("trigger_"
    + nameSuffix, "DEFAULT");
    Trigger exitTrigger = scheduler.getTrigger(triggerKey);
    if (exitTrigger != null)
    continue;
    TaskScheduled scheduledCron = task.getClass()
    .getAnnotation(TaskScheduled.class);

    JobKey jobKey = new JobKey("job_" + nameSuffix, "DEFAULT");
    JobDetail jobDetail = JobBuilder.newJob(task.getClass())
    .requestRecovery(true).withIdentity(jobKey).build();
    CronTrigger cronTrigger = TriggerBuilder
    .newTrigger()
    .withIdentity(triggerKey)
    .forJob(jobKey)
    .withSchedule(
    CronScheduleBuilder
    .cronSchedule(scheduledCron.cron()))
    .build();
    scheduler.scheduleJob(jobDetail, cronTrigger);
    }
    scheduler.start();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    4.配置quartzContext.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"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- =================================================================== -->
    <!-- SchedulerFactoryBean 总调度 需要将 体任务和触发器部署到调度器quartzScheduler上 -->
    <!-- =================================================================== -->
    <bean id="quartzSchedulerNet"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

    </bean>

    <bean class="..TaskManager" lazy-init="false" />

    </beans>


    5.编写业务实现类

    package com..;

    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.stereotype.Component;
    import..Task;
    import..TaskScheduled;

    @Component
    @TaskScheduled(cron="0 0/5 * * * ?")//5分钟推送一次
    public class dangAnTask implements Task {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
    System.out.println("推送数据===================---------------------==========定时任务轮询");
    //业务代码
    }

    }

    springboot 项目:

    package com.dangAn.Utils;
    
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import java.io.UnsupportedEncodingException;
    
    /**
     * 
     *
     * @Author 
     * @Date 
     * @Class 
     * Description
     **/
    @Component
    @EnableScheduling//可以在启动类上注解也可以在当前文件
    public class Task {
    //    @Scheduled(cron = "0 0 12 * * ?")//每天中午12点触发 
    //    @Scheduled(cron = "0 0 */2 * * ?")//两小时
        @Scheduled(cron = "0 0/2 * * * ?")//两分钟
        public void dangAnSendData() throws JobExecutionException, UnsupportedEncodingException {
    //业务逻辑
    }
  • 相关阅读:
    es6箭头函数 this 指向问题
    vue脚手架搭建移动端项目--flexible.js
    vue通过自定义指令 v-py 将名字转拼音
    ES6相关
    闭包
    apply和call与this
    RPC
    Linux根目录下各目录文件类型及各项缩写全称
    网站分析相关
    [转]作为首席架构师,我是如何选择并落地架构方案的?
  • 原文地址:https://www.cnblogs.com/lifan12589/p/13098064.html
Copyright © 2011-2022 走看看