SpringBoot 动态定时任务

本文详细介绍了如何在SpringBoot中实现动态定时任务,包括创建任务JavaBean、配置数据源、定义调度任务接口、创建定时任务枚举、线程池配置、功能核心接口及其实现、定时任务Controller,并探讨了服务启动时自动启动定时任务的方法。
摘要由CSDN通过智能技术生成

既然是动态就必须牵扯到数据库

-- ----------------------------
-- Table structure for scheduled_task
-- ----------------------------
DROP TABLE IF EXISTS `scheduled_task`;
CREATE TABLE `scheduled_task` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `task_key` varchar(128) NOT NULL COMMENT '任务key值(使用bean名称)',
  `task_desc` varchar(128) DEFAULT NULL COMMENT '任务描述',
  `task_cron` varchar(128) NOT NULL COMMENT '任务表达式',
  `init_start_flag` int(2) NOT NULL DEFAULT '1' COMMENT '程序初始化是否启动 1 是 0 否',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniqu_task_key` (`task_key`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of scheduled_task
-- ----------------------------
INSERT INTO `scheduled_task` VALUES ('1', 'scheduledTask01', '定时任务01', '0/5 * * * * ?', '1', '2019-11-22 09:40:56', '2019-11-22 14:27:15');
INSERT INTO `scheduled_task` VALUES ('2', 'scheduledTask02', '定时任务02', '0/2 * * * * ?', '0', '2019-11-22 09:40:58', '2019-11-22 15:33:49');

创建spring Boot项目 基本的依赖就OK 

比如(spring-boot-starter-web/spring-boot-starter-parent)

我用的是springBoot 2.2.1 +mybatis-plus+druid 数据库访问层根据你们自己比较熟悉的框架引用依赖就好

        
    <!-- 设置我们项目的一些版本属性 -->
    <properties>
        <java.version>1.8</java.version>
        <mybatis-puls.version>3.2.0</mybatis-puls.version>
        <mysql.version>5.1.31</mysql.version>
    </properties>

<!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
       <!-- 配置阿里druid连接池,通过改变spring.datasource.type设置数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-puls.version}</version>
        </dependency>

 

接下来配置你们的数据源 ,我用的多数据源就懒得贴出来了,就按你们最基本的配置能访问数据库就成哈哈哈哈哈!

 

好了正式开始了

1.首先要创建任务javaBean


@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ScheduledTask implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 任务key值(使用bean名称)
     */
    private String taskKey;

    /**
     * 任务描述
     */
    private String taskDesc;

    /**
     * 任务表达式
     */
    private String taskCron;

    /**
     * 程序初始化是否启动 1 是 0 否
     */
    private Integer initStartFlag;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 当前是否启动
     */
    private  boolean startFlag;
}

 

2.创建你们的mapper

我没有使用BaseMapper ,你们想怎么写就怎么写  ,只要有以下几个方法的效果就行

public interface ScheduledTaskMapper extends BaseMapper<ScheduledTask> {

    /**
     * 根据key 获取 任务信息
     */
    @Select("select task_key as taskKey,task_desc as taskDesc,task_cron as taskCron,init_start_flag as initStartFlag  from scheduled_task where task_key = '${taskKey}' ")
    ScheduledTask getByKey(@Param("taskKey") String taskKey);

    /**
     * 获取程序初始化需要自启的任务信息
     */
    @Select("select task_key as taskKey,task_desc as taskDesc,task_cron as taskCron,init_start_flag as initStartFlag from 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值