数据库动态定时任务

关于Springboot基于SchedulingConfigurer实现数据库动态执行多个定时任务 关于Springboot基于SchedulingConfigurer实现数据库动态执行多个定时任务总结 开发中遇到个需求,需要根据用户选择的季度或者月生成定时任务,当客户修改日期时,定时任务也要及时更新。 通常的定时任务是在下次执行时查询数据库,自动调整定时时间。 而这个因为间隔时间太长,等代码自动调整会出现问题(如年调整到月,会在本年年底执行定时任务时再调整,明显不符合需求) 所以根据网上查找的定时任务略微修改符合自己需求。 直接贴代码 package com.cm.property.scheduledT 阅读详情


基于SpringBoot + MySQL数据库实现动态定时任务

项目代码https://gitee.com/git870845084/scheduled.git

一、MySQL中新建task表

DROP TABLE IF EXISTS `task`;
CREATE TABLE `task`  (
  `task_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `task_cron` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'cron表达式',
  `task_class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类路径',
  `task_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称',
  `task_description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
  `task_enable` int(2) NOT NULL COMMENT '1/0   启动/关闭',
  PRIMARY KEY (`task_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

插入数据

INSERT INTO `task` VALUES ('1', '0/5 * * * * ?', 'com.scheduled.task.LogTask', '日志打印', NULL, 1);
INSERT INTO `task` VALUES ('2', '0/10 * * * * ?', 'com.scheduled.task.TestTask', '测试任务', NULL, 1);

Cron表达式参数:* * * * * *
秒(0~59)如:0/5表示每5秒
分(0~59)
时(0~59)
月的某天(0~31)需计算
月(0~11)
周几(1~7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

二、新建一个SpringBoot项目

1.添加maven坐标

在pom.xml中添加maven坐标

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

2.添加配置信息

application.properties

server.port=80

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=666666

logging.level.com.example.demo.dao=debug

3.任务调度配置类

package com.scheduled.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

@Configuration
public class ScheduledConfig {

	@Bean
	public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
		ThreadPoolTaskScheduler poolTaskScheduler = new ThreadPoolTaskScheduler();
		poolTaskScheduler.setThreadNamePrefix("task-");
		return poolTaskScheduler;
	}
	
}

4.任务调度触发器

package com.scheduled.trigger;

import java.util.Date;

import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.support.CronTrigger;

public class ScheduledTrigger implements Trigger {
	
	private String cron;
	
	@SuppressWarnings("unused")
	private ScheduledTrigger() {}
	
	public ScheduledTrigger(String cron) {
		this.cron = cron;
	}

	@Override
	public Date nextExecutionTime(TriggerContext triggerContext) {
		CronTrigger cronTrigger = new CronTrigger(cron);
		Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);
		return nextExecutionTime;
	}

}

5.任务调度组件用来开启/关闭/重启计划任务

package com.scheduled.dynamic;

import java.util.Collection;
import java.util.concurrent.ScheduledFuture;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import com.scheduled.domain.TaskEntity;
import com.scheduled.task.AbstractTask;
import com.scheduled.trigger.ScheduledTrigger;

@Component
public class DynamicScheduleTask {
	
	@Autowired
	private ThreadPoolTaskScheduler threadPoolTaskScheduler;

	//关闭所有任务
	public void shutDown() {
		Collection<ScheduledFuture<?>> values = SingletonFuture.getInstance().getFutureMap().values();
		for(ScheduledFuture<?> future:values) {
			if (future != null) {
				future.cancel(true);
			}
		}
		SingletonFuture.getInstance().getFutureMap().clear();
	}
	
	public void start(AbstractTask task,TaskEntity entity) {
		ScheduledTrigger trigger = new ScheduledTrigger(entity.getTask_cron());
		ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(task, trigger);
		String className = entity.getTask_class_name();
		SingletonFuture.getInstance().getFutureMap().put(className, future);
	}
	
	public void stop(String className) {
		if(!StringUtils.isEmpty(className)) {
			ScheduledFuture<?> future = SingletonFuture.getInstance().getFutureMap().get(className);
			if (future != null) {
				future.cancel(true);
				SingletonFuture.getInstance().getFutureMap().remove(className);
			}
		}
	}
	
	public void restart(AbstractTask task,TaskEntity entity) {
		stop(entity.getTask_class_name());
		start(task, entity);
	}
	
}

任务缓存类

package com.scheduled.dynamic;

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

public class SingletonFuture {
	
	private static volatile SingletonFuture ONLY;
	
	private Map<String, ScheduledFuture<?>> futureMap = new ConcurrentHashMap<String, ScheduledFuture<?>>();
	
	private SingletonFuture() {}
	
	public static SingletonFuture getInstance() {
		if(null == ONLY) {
			synchronized(SingletonFuture.class) {
				if(null == ONLY) {
					ONLY = new SingletonFuture();
				}
			}
		}
		return ONLY;
	}

	public Map<String, ScheduledFuture<?>> getFutureMap() {
		return futureMap;
	}

	public void setFutureMap(Map<String, ScheduledFuture<?>> futureMap) {
		this.futureMap = futureMap;
	}

}

6.需要执行的任务

任务父类

package com.scheduled.task;

public abstract class AbstractTask implements Runnable {
	
}

计划打印日志类

package com.scheduled.task;

import java.text.SimpleDateFormat;
import java.util.Date;

public class LogTask extends AbstractTask {

	@Override
	public void run() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String date = sdf.format(new Date());
		System.out.println(date+" --- : i come");
	}

}

计划测试类

package com.scheduled.task;

import java.text.SimpleDateFormat;
import java.util.Date;

public class TestTask extends AbstractTask {

	@Override
	public void run() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String date = sdf.format(new Date());
		System.out.println(date+" --- : test");
	}

}

7.domain实体

package com.scheduled.domain;

public class TaskEntity {
	
	private String task_id;
	
	private String task_cron;
	
	private String task_class_name;
	
	private String task_name;
	
	private String task_description;
	
	private Integer task_enable;

	public String getTask_id() {
		return task_id;
	}

	public void setTask_id(String task_id) {
		this.task_id = task_id;
	}

	public String getTask_cron() {
		return task_cron;
	}

	public void setTask_cron(String task_cron) {
		this.task_cron = task_cron;
	}

	public String getTask_class_name() {
		return task_class_name;
	}

	public void setTask_class_name(String task_class_name) {
		this.task_class_name = task_class_name;
	}

	public String getTask_name() {
		return task_name;
	}

	public void setTask_name(String task_name) {
		this.task_name = task_name;
	}

	public String getTask_description() {
		return task_description;
	}

	public void setTask_description(String task_description) {
		this.task_description = task_description;
	}

	public Integer getTask_enable() {
		return task_enable;
	}

	public void setTask_enable(Integer task_enable) {
		this.task_enable = task_enable;
	}

	@Override
	public String toString() {
		return "TaskEntity [task_id=" + task_id + ", task_cron=" + task_cron + ", task_class_name=" + task_class_name
				+ ", task_name=" + task_name + ", task_description=" + task_description + ", task_enable=" + task_enable
				+ "]";
	}
	
}

8.DAO层

package com.scheduled.dao.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.scheduled.domain.TaskEntity;

@Mapper
public interface TaskMapper {
	
	@Select("SELECT task_id,task_cron,task_class_name,task_name,task_description,task_enable FROM task WHERE task_enable = 1")
	List<TaskEntity> findAll();
	
	@Select("SELECT task_id,task_cron,task_class_name,task_name,task_description,task_enable FROM task WHERE task_class_name=#{task_class_name}")
	TaskEntity getTaskEntity(String task_class_name);

	@Select("SELECT task_cron FROM task WHERE task_id=#{task_id}")
	String getTaskCronById(String task_id);
	
}

9.SERVICE层

package com.scheduled.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.scheduled.dao.mapper.TaskMapper;
import com.scheduled.domain.TaskEntity;

@Service
public class TaskService {
	
	@Autowired
	private TaskMapper taskMapper;
	
	public List<TaskEntity> findAll() {
		List<TaskEntity> tasks = taskMapper.findAll();
		if(tasks.isEmpty()) {
			throw new RuntimeException("查询异常");
		}
		return tasks;
	}
	
	public TaskEntity getTaskEntity(String className) {
		TaskEntity task = taskMapper.getTaskEntity(className);
		if(null == task) {
			throw new RuntimeException("查询异常");
		}
		return task;
	}

	public String getTaskCronById(String task_id) {
		String cron = taskMapper.getTaskCronById(task_id);
		if(StringUtils.isEmpty(task_id)) {
			throw new RuntimeException("查询异常");
		}
		return cron;
	}

}

10.WEB层

package com.scheduled.controll;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import com.scheduled.domain.TaskEntity;
import com.scheduled.dynamic.DynamicScheduleTask;
import com.scheduled.service.TaskService;
import com.scheduled.task.AbstractTask;

@RestController
public class CronContrll {

	@Autowired
	private DynamicScheduleTask scheduleTask;
	
	@Autowired
	private TaskService taskService;
	
	@GetMapping("startAll")
	public void startAll() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		List<TaskEntity> taskEntitys = taskService.findAll();
		for(TaskEntity entity:taskEntitys) {
			Object newInstance = Class.forName(entity.getTask_class_name()).newInstance();
			AbstractTask task = (AbstractTask) newInstance;
			scheduleTask.start(task, entity);
		}
	}
	
	@GetMapping("shutDown")
	public void shutDown() {
		scheduleTask.shutDown();
	}
	
	@GetMapping("start/{className}")
	public void start(@PathVariable("className") String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		TaskEntity entity = taskService.getTaskEntity(className);
		Object newInstance = Class.forName(className).newInstance();
		AbstractTask task = (AbstractTask) newInstance;
		scheduleTask.start(task, entity);
	}

	@GetMapping("stop/{className}")
	public void stop(@PathVariable("className") String className) {
		scheduleTask.stop(className);
	}
	
	@GetMapping("restart/{className}")
	public void restart(@PathVariable("className") String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		TaskEntity entity = taskService.getTaskEntity(className);
		Object newInstance = Class.forName(className).newInstance();
		AbstractTask task = (AbstractTask) newInstance;
		scheduleTask.restart(task, entity);
	}

}

运行结果
在这里插入图片描述

Spring+Quartz实现动态定制定时任务并适配各种数据库 quartz,spring,定制,适配多种数据库 阅读详情

相关推荐

开关电源EMC整改实录:用WSX系列共模电感搞定30MHz辐射超标

本文详细介绍了开关电源EMC整改实战,通过WSX系列共模电感成功解决30MHz频段辐射超标问题。文章分析了共模干扰的产生机制,对比了不同磁芯材料的性能差异,并提供了电路布局优化与安装技巧,最终通过实测数据验证了整改方案的有效性。

weixin_29305313的博客 415

19、数据库实时推送(更新触发事件)

新建一个名字为ApplyJiQiMa的数据库 往数据库中先增加四条数据,其中 ApplyDate:当前的时间戳,后面用于监听时的排序 JiQiMaS:四条数据的最后一位数分别是1,2,3,4 constdb=wx.cloud.database() constdbApplyJiQiMaCollection=db.collection('ApplyJiQiMa') dbApplyJiQiMaCollection.add({ data:{ ApplyDate:...

huangcheng42123的博客 1052

sentaurus学习笔记(VDMOS仿真)(三)

在Sentaurus中,这通常意味着在2D仿真中,x轴指向下,y轴指向右。定义了在2D模拟中,网格尺寸按照一定的增长率进行扩展,这里的增长率为2.0,意味着远离最小尺寸区域的网格单元大小将是最小尺寸的两倍。定义了2D模拟中网格单元的最小尺寸为0.001微米,这有助于控制网格的最小大小,从而影响仿真的精度和计算成本。表示启用中等级别的日志信息输出,这有助于用户了解仿真过程中发生的事件和可能的问题。表示启用保存调试文件,这可以帮助用户在仿真过程中检查和验证模型的状态。这行代码设置了仿真过程中使用的线程数。

qq_52640792的博客 1807

教你使用SpringBoot 创建配合数据库动态执行的定时任务

序言:创建定时任务非常简单,主要有两种创建方式: 基于注解(@Scheduled) 基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。 一、静态定时任务(基于注解) 基于注解来创建定时任务非常简单,只需几行代码便可完成。 @Scheduled 除了支持灵活的参数表达...

理木客 3063

常见卫星图源下载教程

上面列出的8个常见的亚米级别数据源都可以通过xyz协议或者wmts/wms协议进行下载。这些协议是什么?地理信息数据为了方便网络传输,制定了一系列的地理数据传输标准(wms/wmts/xyz等)。协议特点优点缺点栅格数据支持矢量数据支持WMS通过HTTP请求获取GIS数据,服务器会将数据渲染成图像高度定制的地图;交互性强服务器渲染图像,响应时间较长支持有限支持WMTS提供预渲染的地图瓦片速度快,因为地图瓦片可以预先生成并在请求时快速提供瓦片的内容是预先确定的,无法进行定制支持。

锐多宝的地理空间 1万+

KG²RAG框架:知识图谱增强大模型检索生成技术解析

知识图谱(Knowledge Graph)作为结构化知识表示的重要方式,与向量检索技术结合形成了新一代检索增强生成(RAG)框架。其核心原理是通过图神经网络编码器提取子图特征,并与文本向量空间对齐,实现结构化与非结构化知识的协同检索。这种技术显著提升了专业领域问答的事实准确性,在医疗诊断、金融分析等需要高可靠性响应的场景中具有重要价值。KG²RAG框架创新性地采用双通道处理架构,结合Neo4j等图数据库与Milvus向量数据库,通过动态检索调度器智能选择最优检索路径。实测表明该方案能降低40%以上的事实错误

weixin_29306875的博客 105

【SpringBoot篇】Spring_Task定时任务框架

Spring Task 是 Spring 框架提供的一种任务调度和异步处理的解决方案。可以按照约定的时间自动执行某个代码逻辑它可以帮助开发者在 Spring 应用中轻松地实现定时任务、异步任务等功能,提高应用的效率和可维护性。

小吉妙妙屋 4969

无人驾驶Autoware导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对无人驾驶Autoware介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2397

基于数据库的动态定时任务

文章目录1.实现原理2.源码解析数据库表实体类任务类调度配置类操作数据库Service定时任务初始化类刷新定时任务接口类3.注意事项 1.实现原理 @EnableScheduling开启任务调度; 自定义调度线程池; 数据库定义定时任务; 启动完成时,加载数据库定时任务并提交到线程池; 调用接口触发线程池中任务的更新(新增、删除、修改); 2.源码解析 数据库表 CREATE TABLE `timed_task` ( `id` bigint(20) NOT NULL COMMENT '主键',

骑个小蜗牛的博客 2万+

【WRF-Urban】增加动态空间热排放数据以替换人为热排放参数

增加动态空间热排放数据以替换人为热排放参数

WW、forever的博客 1044

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 117

使用Nacos配置中心、Springboot实现动态任务调度

众所周知SpringBoot中通过@Scheduled即可使用定时任务,但是我们有需求需要动态的定时导出报表这可怎么办呢,当然市面上还有很多的任务调度器也是不错的.本文主要教大家使用Nacos配置中心和SpringBoot实现动态任务调度. 话不多说,代码奉上. public interface AbstractDynamicSchedule extends Runnable { /** * 任务名称 * @return 返回执行任务名称用于打日志 */ St

barcke的博客 3483

Kafka 性能优化与常见问题排查

Kafka 的高性能依赖于合理的集群设计、参数优化与高效的监控体系。生产环境中,应重点关注I/O 瓶颈、分区规划、Producer/Consumer 参数调优,并通过监控与排查手段快速定位问题,从而保障 Kafka 在实时场景下的稳定运行。

X2829352498的博客 235

@scheduled cron动态修改_SpringBoot 创建定时任务(配合数据库动态执行)

作者:yizhiwazihttp://www.jianshu.com/p/d160f2536de7序言:创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。一、静态定时任务(基于注解)基...

weixin_36239938的博客 1278

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringBoot 创建定时任务(配合数据库动态执行)

序言 创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。 一、静态定时任务(基于注解) 基于注解来创建定时任务非常简单,只需几行代码便可完成。 @Scheduled除了...

qq_24047659的博客 4450

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot——创建定时任务(配合数据库动态执行)

序言:创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。 一、静态定时任务(基于注解) 基于注解来创建定时任务非常简单,只需几行代码便可完成。 @Scheduled 除了支持灵活...

命中的缘分的博客 2696

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java之SpringBoot 创建定时任务(配合数据库动态执行)

SpringBoot 创建定时任务(配合数据库动态执行) 序言:创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。 一、静态定时任务(基于注解) 基于注解来创建定时任务非常简单...

命中的缘分的博客 2万+

springboot定时器动态mysql_SpringBoot 创建定时任务(配合数据库动态执行)

序言:创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。一、静态定时任务(基于注解)基于注解来创建定时任务非常简单,只需几行代码便可完成。@Scheduled 除了支持灵活的参数表达式...

weixin_26858217的博客 283

通过SchedulingConfigurer 接口完成动态定时任务(配合数据库动态执行)

一、Spring 中,创建定时任务除了使用@Scheduled 注解外,还可以使用 SchedulingConfigurer。既然两者都可以实现定时任务,那有什么不同呢? @Schedule注解的一个缺点就是其定时时间不能动态更改,它适用于具有固定任务周期的任务,若要修改任务执行周期,只能走“停服务→修改任务执行周期→重启服务”这条路。 而基于 SchedulingConfigurer 接口方式可...

qq_41536338的博客 8375

SpringBoot动态定时任务的动态配置处理(动态实时读取数据库配置,支持不重启服务下动态修改和新增任务)

SpringBoot动态定时任务的动态配置处理(动态实时读取数据库配置,支持不重启服务下动态修改和新增任务)

@素素~的博客 2761

navicat怎么查看数据库的url_SpringBoot 创建定时任务(配合数据库动态执行)

作者:yizhiwazi来源:www.jianshu.com/p/d160f2536de7序言:创建定时任务非常简单,主要有两种创建方式:一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer). 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就大派用场了。一、静态定时任务(基于注解)基于注解来...

weixin_32022143的博客 590

SpringBoot动态定时任务-整合数据库

最近使用定时任务比较多,想起之前有一次用到过,但没有代码了。重新整理一份,仅供参考! 数据库使用的是mysql: DROP TABLE IF EXISTS `bj_wcs`.`wcs_huakang_cron`; -- ---------------------------- -- Table structure for wcs_huakang_cron -- ---------------------------- CREATE TABLE `wcs_huaka

yingmengxuepingbao的专栏 1820

Springboot整合Quartz实现定时任务数据库动态配置

Springboot整合Quartz实现定时任务数据库动态配置

识时务者的个人博客 16万+
上一篇: 门户模式
下一篇: SpringBoot测试用例
l_learning
博客等级 码龄8年 15粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值