springboot整合Quartz定时任务管理

pom.xml

<!-- SpringBoot 整合 Quartz 定时任务 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
            <version>2.3.5.RELEASE</version>
        </dependency>

sql

DROP TABLE IF EXISTS `scheduled_task`;
CREATE TABLE `scheduled_task` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `taskkey` varchar(128) DEFAULT NULL COMMENT '任务key值(使用bean名称)',
  `taskdesc` varchar(128) DEFAULT NULL COMMENT '任务描述',
  `taskcron` varchar(128) DEFAULT NULL COMMENT '任务表达式',
  `initstartflag` int(1) DEFAULT '1' COMMENT '程序初始化是否启动 1 是 0 否',
  `createtime` varchar(30) DEFAULT NULL COMMENT '创建时间',
  `createuser` varchar(15) DEFAULT NULL COMMENT '创建工作人员',
  `createuserid` int(6) DEFAULT NULL COMMENT '创建人员id',
  `del` int(1) DEFAULT NULL COMMENT '是否删除',
  `updateuser` varchar(15) DEFAULT NULL COMMENT '修改人员',
  `updateuserid` int(6) DEFAULT NULL COMMENT '修改人员id',
  `updatetime` varchar(30) DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='定时任务表';

ScheduledTaskConfig

import com.xnhy.educationadmin.controller.schedule.ScheduledTaskJob;
import com.xnhy.educationadmin.pojo.ScheduledTaskEnum;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

import java.util.Map;

@Configuration
public class ScheduledTaskConfig {

    /**
     * 日志
     */
    private static final Logger LOGGER = LogManager.getLogger(ScheduledTaskConfig.class);

    @Bean
    public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
        LOGGER.info("创建定时任务调度线程池 start");
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(20);
        threadPoolTaskScheduler.setThreadNamePrefix("taskExecutor-");
        threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
        threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
        LOGGER.info("创建定时任务调度线程池 end");
        return threadPoolTaskScheduler;
    }

    /**
     * 初始化定时任务Map
     * key :任务key
     * value : 执行接口实现
     */
    @Bean(name = "scheduledTaskJobMap")
    public Map<String, ScheduledTaskJob> scheduledTaskJobMap() {
        return ScheduledTaskEnum.initScheduledTask();
    }
}

enum

import com.xnhy.educationadmin.controller.schedule.OperationScheduleTask;
import com.xnhy.educationadmin.controller.schedule.ScheduledTask01;
import com.xnhy.educationadmin.controller.schedule.ScheduledTaskJob;
import com.xnhy.educationadmin.controller.schedule.VideoCompressPathTask;
import com.xnhy.educationadmin.controller.search.AlbumSearchTask;
import com.xnhy.educationadmin.controller.search.ContentSearchTask;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 定时任务枚举
 * 2021-08-07
 * >>> 2021-08-09 chen
 */
public enum ScheduledTaskEnum {
    /**
     * 运营位定时任务
     * 2021-08-09
     * chenchao
     */
    TASK_01("OperationScheduleTask", new OperationScheduleTask()),
    // 测试定时任务
    TASK_02("scheduledTask01", new ScheduledTask01()),
    /**
     * 视频压缩路径定时任务
     * 2021-08-09
     * chenchao
     */
    TASK_03("VideoCompressPathTask", new VideoCompressPathTask()),
    // elasticsearch 数据同步 专辑数据
    TASK_04("AlbumSearchTask", new AlbumSearchTask()),
    // elasticsearch 数据同步 单集数据
    TASK_05("ContentSearchTask", new ContentSearchTask()),
    ;// 定义的值,如果有新的定时任务需要添加值 chenchao 2021-08-09
    /**
     * 定时任务key
     */
    private String taskKey;
    /**
     * 定时任务 执行实现类
     */
    private ScheduledTaskJob scheduledTaskJob;

    ScheduledTaskEnum(String taskKey, ScheduledTaskJob scheduledTaskJob) {
        this.taskKey = taskKey;
        this.scheduledTaskJob = scheduledTaskJob;
    }

    /**
     * 初始化 所有任务
     */
    public static Map<String, ScheduledTaskJob> initScheduledTask() {
        if (ScheduledTaskEnum.values().length < 0) {
            return new ConcurrentHashMap<>();
        }
        Map<String, ScheduledTaskJob> scheduledTaskJobMap = new ConcurrentHashMap<>();
        for (ScheduledTaskEnum taskEnum : ScheduledTaskEnum.values()) {
            scheduledTaskJobMap.put(taskEnum.taskKey, taskEnum.scheduledTaskJob);
        }
        return scheduledTaskJobMap;
    }
}

ScheduledTaskJob

/**
 * 调度任务公共父接口
 */
public interface ScheduledTaskJob extends Runnable {
}

ScheduledTask01

package com.xnhy.educationadmin.controller.schedule;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * 任务 01
 */
public class ScheduledTask01 implements ScheduledTaskJob {
    /**
     * 日志
     */
    private static final Logger LOGGER = LogManager.getLogger(ScheduledTask01.class);

    @Override
    public void run() {
        LOGGER.info("ScheduledTask => 01  run  当前线程名称 {} ", Thread.currentThread().getName());
    }
}

controller

import com.alibaba.fastjson.JSONObject;
import com.xnhy.educationadmin.domain.common.ScheduledTaskVO;
import com.xnhy.educationadmin.service.schedule.ScheduledTaskService;
import com.xnhy.educationadmin.util.AjaxJson;
import com.xnhy.educationadmin.util.Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 * 定时任务 controller
 */
@RestController
@RequestMapping("/scheduled")
public class ScheduledController {


    @Autowired
    private ScheduledTaskService scheduledTaskService;
    /**
     * 所有任务列表
     */
    @RequestMapping("/taskList")
    public Object taskList(ScheduledTaskVO vo, HttpServletRequest request) {
        AjaxJson json = new AjaxJson();
        try {
            if (!Util.isEmpty(vo.getPage())){
                vo.setPage((vo.getPage() - 1)*vo.getLimit());
            }
            // 管理页面搜索功能
            String search = request.getParameter("searchParams");
            if (!Util.isEmpty(search)){
                JSONObject jsonObject = JSONObject.parseObject(search);
                vo.setTaskdesc(Util.toSearchObject(jsonObject,"title"));
            }
            json.setCode(0);
            json.setCount(scheduledTaskService.countScheduledTask(vo));
            json.setData(scheduledTaskService.listScheduledTask(vo));
        }catch (Exception e){
            json.setCode(1);
            json.setMsg(e.toString());
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 根据任务key => 启动任务
     */
    @RequestMapping("/start")
    public Object start(@RequestParam("taskKey") String taskKey) {
        AjaxJson json= new AjaxJson();
        try {
            scheduledTaskService.start(taskKey);
            json.setCode(0);
            json.setMsg("开启成功");
        }catch (Exception e){
            json.setCode(1);
            json.setMsg(e.toString());
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 根据任务key => 停止任务
     */
    @RequestMapping("/stop")
    public Object stop(@RequestParam("taskKey") String taskKey) {
        AjaxJson json= new AjaxJson();
        try {
            scheduledTaskService.stop(taskKey);
            json.setCode(0);
            json.setMsg("关闭成功");
        }catch (Exception e){
            json.setCode(1);
            json.setMsg(e.toString());
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 根据任务key => 重启任务
     */
    @RequestMapping("/restart")
    public String restart(@RequestParam("taskKey") String taskKey) {
        scheduledTaskService.restart(taskKey);
        return "restart success";
    }

    /**
     * 添加详情
     * @param request
     * @param vo
     * @return
     */
    @RequestMapping("/addDetail")
    public Object addDetail(HttpServletRequest request,ScheduledTaskVO vo){
        AjaxJson json = new AjaxJson();
        try {
            String username =request.getSession().getAttribute("username").toString();
            String  userId = request.getSession().getAttribute("userid").toString();
            vo.setCreatetime(Util.getNow(null));
            vo.setCreateuser(username);
            vo.setCreateuserid(Integer.parseInt(userId));
            vo.setDel(1);
            scheduledTaskService.insertSelective(vo);
            json.setMsg("请求成功");
            json.setCode(0);
        }catch (Exception e){
            json.setMsg(e.toString());
            json.setCode(1);
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 修改
     * @param request
     * @param vo
     * @return
     */
    @RequestMapping("/updateDetail")
    public Object updateDetail(HttpServletRequest request,ScheduledTaskVO vo){
        AjaxJson json = new AjaxJson();
        try {
            String username =request.getSession().getAttribute("username").toString();
            String  userId = request.getSession().getAttribute("userid").toString();
            vo.setUpdatetime(Util.getNow(null));
            vo.setUpdateuser(username);
            vo.setUpdateuserid(Integer.parseInt(userId));
            vo.setDel(1);
            scheduledTaskService.updateByPrimaryKeySelective(vo);
            json.setMsg("修改成功");
            json.setCode(0);
        }catch (Exception e){
            json.setMsg(e.toString());
            json.setCode(1);
            e.printStackTrace();
        }
        return json;
    }

    @RequestMapping("/remove")
    public Object remove(@RequestParam(value = "id", required = false, defaultValue = "")String id){
        AjaxJson json = new AjaxJson();
        try {
            String[] str = id.split(",");
            for (int i = 0;i<str.length;i++) {
                scheduledTaskService.deleteByPrimaryKey(Integer.parseInt(str[i]));
            }
            json.setCode(0);
            json.setMsg("删除成功");
        }catch (Exception e){
            json.setCode(1);
            json.setMsg(e.toString());
            e.printStackTrace();
        }
        return json;
    }
}

service

package com.xnhy.educationadmin.service.schedule;

import com.xnhy.educationadmin.domain.common.ScheduledTaskVO;

import java.util.List;

public interface ScheduledTaskService {
    /**
     * 所有任务列表
     */
    List<ScheduledTaskVO> taskList();

    /**
     * 根据任务key 启动任务
     */
    Boolean start(String taskKey);

    /**
     * 根据任务key 停止任务
     */
    Boolean stop(String taskKey);

    /**
     * 根据任务key 重启任务
     */
    Boolean restart(String taskKey);


    /**
     * 程序启动时初始化  ==> 启动所有正常状态的任务
     */
    void initAllTask(List<ScheduledTaskVO> scheduledTaskBeanList);

    /**
     * 数据列表
     * @param record
     * @return
     */
    List<ScheduledTaskVO> listScheduledTask(ScheduledTaskVO record);

    /**
     * 总数
     * @param record
     * @return
     */
    long countScheduledTask(ScheduledTaskVO record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table bj_xnhy_scheduled_task
     *
     * @mbg.generated
     */
    int insertSelective(ScheduledTaskVO record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table bj_xnhy_scheduled_task
     *
     * @mbg.generated
     */
    ScheduledTaskVO selectByPrimaryKey(Integer id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table bj_xnhy_scheduled_task
     *
     * @mbg.generated
     */
    int updateByPrimaryKeySelective(ScheduledTaskVO record);

    /**
     * 删除
     * @param id
     * @return
     */
    int deleteByPrimaryKey(Integer id);

}

serviceImpl

import com.xnhy.educationadmin.controller.schedule.ScheduledTaskJob;
import com.xnhy.educationadmin.dao.common.ScheduledTaskMapper;
import com.xnhy.educationadmin.domain.common.ScheduledTaskVO;
import com.xnhy.educationadmin.service.schedule.ScheduledTaskService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.locks.ReentrantLock;

@Service
public class ScheduledTaskServiceImpl implements ScheduledTaskService {

    private static final Logger LOGGER = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);

    @Autowired
    private ScheduledTaskMapper taskMapper;// 修改成自己的mapper
    /**
     * 可重入锁
     */
    private ReentrantLock lock = new ReentrantLock();
    /**
     * 定时任务线程池
     */
    @Autowired
    private ThreadPoolTaskScheduler threadPoolTaskScheduler;
    /**
     * 所有定时任务存放Map
     * key :任务 key
     * value:任务实现
     */
    @Autowired
    @Qualifier(value = "scheduledTaskJobMap")
    private Map<String, ScheduledTaskJob> scheduledTaskJobMap;

    /**
     * 存放已经启动的任务map
     */
    private Map<String, ScheduledFuture> scheduledFutureMap = new ConcurrentHashMap<>();

    /**
     * 所有任务列表
     */
    @Override
    public List<ScheduledTaskVO> taskList() {
        LOGGER.info(">>>>>> 获取任务列表开始 >>>>>> ");
        //数据库查询所有任务 => 未做分页
        List<ScheduledTaskVO> taskBeanList = taskMapper.getAllTask();
        if (CollectionUtils.isEmpty(taskBeanList)) {
            return new ArrayList<>();
        }

        for (ScheduledTaskVO taskBean : taskBeanList) {
            String taskKey = taskBean.getTaskkey();
            //是否启动标记处理
            taskBean.setStartFlag(this.isStart(taskKey));
        }
        LOGGER.info(">>>>>> 获取任务列表结束 >>>>>> ");
        return taskBeanList;
    }


    /**
     * 根据任务key 启动任务
     */
    @Override
    public Boolean start(String taskKey) {
        LOGGER.info(">>>>>> 启动任务 {} 开始 >>>>>>"+taskKey);
        //添加锁放一个线程启动,防止多人启动多次
        lock.lock();
        LOGGER.info(">>>>>> 添加任务启动锁完毕");
        try {
            //校验是否已经启动
            if (this.isStart(taskKey)) {
                LOGGER.info(">>>>>> 当前任务已经启动,无需重复启动!");
                return false;
            }
            //校验任务是否存在
            if (!scheduledTaskJobMap.containsKey(taskKey)) {
                return false;
            }
            //根据key数据库获取任务配置信息
            ScheduledTaskVO scheduledTask = taskMapper.getByKey(taskKey);
            //启动任务
            this.doStartTask(scheduledTask);
        } finally {
            // 释放锁
            lock.unlock();
            LOGGER.info(">>>>>> 释放任务启动锁完毕");
        }
       LOGGER.info(">>>>>> 启动任务 {} 结束 >>>>>>"+taskKey);
        return true;
    }

    /**
     * 根据 key 停止任务
     */
    @Override
    public Boolean stop(String taskKey) {
        LOGGER.info(">>>>>> 进入停止任务 {}  >>>>>>"+ taskKey);
        //当前任务实例是否存在
        boolean taskStartFlag = scheduledFutureMap.containsKey(taskKey);
        //LOGGER.info(">>>>>> 当前任务实例是否存在 {}", taskStartFlag);
        if (taskStartFlag) {
            //获取任务实例
            ScheduledFuture scheduledFuture = scheduledFutureMap.get(taskKey);
            //关闭实例
            scheduledFuture.cancel(true);
        }
        LOGGER.info(">>>>>> 结束停止任务 {}  >>>>>>"+ taskKey);
        return taskStartFlag;
    }

    /**
     * 根据任务key 重启任务
     */
    @Override
    public Boolean restart(String taskKey) {
        LOGGER.info(">>>>>> 进入重启任务 {}  >>>>>>"+ taskKey);
        //先停止
        this.stop(taskKey);
        //再启动
        return this.start(taskKey);
    }

    /**
     * 程序启动时初始化  ==> 启动所有正常状态的任务
     */
    @Override
    public void initAllTask(List<ScheduledTaskVO> scheduledTaskBeanList) {
        LOGGER.info("程序启动 ==> 初始化所有任务开始 !size={}"+ scheduledTaskBeanList.size());
        if (CollectionUtils.isEmpty(scheduledTaskBeanList)) {
            return;
        }
        for (ScheduledTaskVO scheduledTask : scheduledTaskBeanList) {
            //任务 key
            String taskKey = scheduledTask.getTaskkey();
            //校验是否已经启动
            if (this.isStart(taskKey)) {
                continue;
            }
            //启动任务
            this.doStartTask(scheduledTask);
        }
        LOGGER.info("程序启动 ==> 初始化所有任务结束 !size={}"+scheduledTaskBeanList.size());
    }

    @Override
    public List<ScheduledTaskVO> listScheduledTask(ScheduledTaskVO record) {
        LOGGER.info(">>>>>> 获取任务列表开始 >>>>>> ");
        //数据库查询所有任务 => 未做分页
        List<ScheduledTaskVO> taskBeanList = taskMapper.listScheduledTask(record);
        if (CollectionUtils.isEmpty(taskBeanList)) {
            return new ArrayList<>();
        }

        for (ScheduledTaskVO taskBean : taskBeanList) {
            String taskKey = taskBean.getTaskkey();
            //是否启动标记处理
            taskBean.setStartFlag(this.isStart(taskKey));
        }
        LOGGER.info(">>>>>> 获取任务列表结束 >>>>>> ");
        return taskBeanList;
    }

    @Override
    public long countScheduledTask(ScheduledTaskVO record) {
        return taskMapper.countScheduledTask(record);
    }

    @Override
    public int insertSelective(ScheduledTaskVO record) {
        return taskMapper.insertSelective(record);
    }

    @Override
    public ScheduledTaskVO selectByPrimaryKey(Integer id) {
        return taskMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(ScheduledTaskVO record) {
        return taskMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return taskMapper.deleteByPrimaryKey(id);
    }

    /**
     * 执行启动任务
     */
    private void doStartTask(ScheduledTaskVO scheduledTask) {
        try {
            //任务key
            String taskKey = scheduledTask.getTaskkey();
            //定时表达式
            String taskCron = scheduledTask.getTaskcron();
            //获取需要定时调度的接口
            ScheduledTaskJob scheduledTaskJob = scheduledTaskJobMap.get(taskKey);
            LOGGER.info(">>>>>> 任务 [ {} ] ,cron={"+ scheduledTask.getTaskdesc()+"}---bean名称:"+taskKey+"---表达式:"+taskCron);
            ScheduledFuture scheduledFuture = threadPoolTaskScheduler.schedule(scheduledTaskJob,
                    new Trigger() {
                        @Override
                        public Date nextExecutionTime(TriggerContext triggerContext) {
                            CronTrigger cronTrigger = new CronTrigger(taskCron);
                            return cronTrigger.nextExecutionTime(triggerContext);
                        }
                    });
            //将启动的任务放入 map
            scheduledFutureMap.put(taskKey, scheduledFuture);
        }catch (Exception e){
            LOGGER.info("启动定时任务报错:"+e.toString());
            e.printStackTrace();
        }
    }

    /**
     * 任务是否已经启动
     */
    private Boolean isStart(String taskKey) {
        //校验是否已经启动
        if (scheduledFutureMap.containsKey(taskKey)) {
            if (!scheduledFutureMap.get(taskKey).isCancelled()) {
                return true;
            }
        }
        return false;
    }
}

BeanContext

package com.xnhy.educationadmin.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

//手动获取Spring中的bean  注意这个类要一定交给spring来管理
@Component
public class BeanContext implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        BeanContext.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext(){
        return applicationContext;
    }

    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) throws BeansException {
        return (T)applicationContext.getBean(name);
    }

    public static <T> T getBean(Class<T> clz) throws BeansException {
        return (T)applicationContext.getBean(clz);
    }
}

初始化加载数据

package com.xnhy.educationadmin.controller.schedule;

import com.xnhy.educationadmin.dao.common.ScheduledTaskMapper;
import com.xnhy.educationadmin.domain.common.ScheduledTaskVO;
import com.xnhy.educationadmin.service.schedule.ScheduledTaskService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @see @Order注解的执行优先级是按value值从小到大顺序。
 * 项目启动完毕后开启需要自启的任务
 */
@Component
@Order(value = 1)
public class ScheduledTaskRunner implements ApplicationRunner {
    /**
     * 日志
     */
    private static final Logger LOGGER = LogManager.getLogger(ScheduledTaskRunner.class);

    @Autowired
    private ScheduledTaskMapper taskMapper;

    @Autowired
    private ScheduledTaskService scheduledTaskService;

    /**
     * 程序启动完毕后,需要自启的任务
     */
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        LOGGER.info(" >>>>>> 项目启动完毕, 开启 => 需要自启的任务 开始!");
        List<ScheduledTaskVO> scheduledTaskBeanList = taskMapper.getAllNeedStartTask();
        scheduledTaskService.initAllTask(scheduledTaskBeanList);
        LOGGER.info(" >>>>>> 项目启动完毕, 开启 => 需要自启的任务 结束!");
    }
}

定时任务加载service需要BeanContext,不然会报错空指针异常

......其他定时任务
  private OperationService operationService ;

    @Override
    public void run() {
        try {
            operationService = BeanContext.getApplicationContext().getBean(OperationService.class);
            log.info("------------运营位定时任务---start");
            ......

部分sql,添加修改的省略了


  <sql id="queryConditions">
    <!-- 查询条件 -->
    <if test='taskdesc != null  and taskdesc !=""'>
      and x.taskdesc LIKE concat('%',#{taskdesc,jdbcType=VARCHAR},'%')
    </if>
  </sql>
  <!--  总数-->
  <select id="countScheduledTask" resultType="java.lang.Long" parameterType="com.xnhy.educationadmin.domain.common.ScheduledTaskVO">
    select
    count(x.id)
    from bj_xnhy_scheduled_task x
    where 1 = 1
    <include refid="queryConditions"/>
  </select>

  <!-- 列表 -->
  <select id="listScheduledTask" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from bj_xnhy_scheduled_task x
    where 1 = 1
    <include refid="queryConditions"/>
    ORDER BY x.createtime DESC
    <if test='page != null and limit != null'>
      limit #{page,jdbcType=INTEGER},#{limit,jdbcType=INTEGER}
    </if>
  </select>

  <!-- 根据key 获取 任务信息-->
  <select id="getByKey" resultType="com.xnhy.educationadmin.domain.common.ScheduledTaskVO"
    parameterType="java.lang.String">
      SELECT x.*
      FROM bj_xnhy_scheduled_task x
      WHERE x.taskkey = #{taskKey,jdbcType=VARCHAR}
  </select>

  <!--获取程序初始化需要自启的任务信息-->
  <select id="getAllNeedStartTask" resultType="com.xnhy.educationadmin.domain.common.ScheduledTaskVO">
    SELECT x.*
    FROM bj_xnhy_scheduled_task X
    WHERE x.del =1 AND x.initstartflag = 1
  </select>

  <!-- 获取所有任务-->
  <select id="getAllTask" resultType="com.xnhy.educationadmin.domain.common.ScheduledTaskVO">
     SELECT x.*
     FROM bj_xnhy_scheduled_task x WHERE x.del =1
  </select>

ScheduledTaskVO

package com.xnhy.educationadmin.domain.common;

import com.xnhy.educationadmin.domain.system.BasicDO;
import lombok.Data;

/**
 *
 * This class was generated by MyBatis Generator.
 * This class corresponds to the database table bj_xnhy_scheduled_task
 *
 * @mbg.generated do_not_delete_during_merge
 */
@Data
public class ScheduledTaskVO extends BasicDO {
    /**
     * Database Column Remarks:
     *   主键
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.id
     *
     * @mbg.generated
     */
    private Integer id;

    /**
     * Database Column Remarks:
     *   任务key值(使用bean名称)
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.taskkey
     *
     * @mbg.generated
     */
    private String taskkey;

    /**
     * Database Column Remarks:
     *   任务描述
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.taskdesc
     *
     * @mbg.generated
     */
    private String taskdesc;

    /**
     * Database Column Remarks:
     *   任务表达式
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.taskcron
     *
     * @mbg.generated
     */
    private String taskcron;

    /**
     * Database Column Remarks:
     *   程序初始化是否启动 1 是 0 否
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.initstartflag
     *
     * @mbg.generated
     */
    private Integer initstartflag;

    /**
     * 当前是否已启动
     */
    private boolean startFlag;
    /**
     * Database Column Remarks:
     *   创建时间
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.createtime
     *
     * @mbg.generated
     */
    private String createtime;

    /**
     * Database Column Remarks:
     *   创建工作人员
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.createuser
     *
     * @mbg.generated
     */
    private String createuser;

    /**
     * Database Column Remarks:
     *   创建人员id
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.createuserid
     *
     * @mbg.generated
     */
    private Integer createuserid;

    /**
     * Database Column Remarks:
     *   是否删除
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.del
     *
     * @mbg.generated
     */
    private Integer del;

    /**
     * Database Column Remarks:
     *   修改人员
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.updateuser
     *
     * @mbg.generated
     */
    private String updateuser;

    /**
     * Database Column Remarks:
     *   修改人员id
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.updateuserid
     *
     * @mbg.generated
     */
    private Integer updateuserid;

    /**
     * Database Column Remarks:
     *   修改时间
     *
     * This field was generated by MyBatis Generator.
     * This field corresponds to the database column bj_xnhy_scheduled_task.updatetime
     *
     * @mbg.generated
     */
    private String updatetime;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperChen12356

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值