SpringBoot基于数据库的定时任务统一管理的实现

网友投稿 678 2023-07-03

SpringBoot基于数据库的定时任务统一管理的实现

SpringBoot基于数据库的定时任务统一管理的实现

定时任务1

import lombok.extern.slf4j.Slf4j;

/**

* @author Created by niugang on 2019/12/24/15:29

*/

@Slf4j

public class TaskTest {

public void task1() {

log.info("反射调用测试[一]类");

}

}

定时任务2

import lombok.extern.slf4j.Slf4j;

/**

* @author Created by niugang on 2019/12/24/15:54

*/

@Slf4j

public class TaskTest2 {

public void task2() {

log.info("反射调用测试[二]类");

}

}

配置类

import lombok.Data;

import lombok.extern.slf4j.Slf4j;

import org.springframework.context.annotation.Configuration;

import org.spriYBnMidobVngframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.SchedulingConfigurer;

import org.springframework.scheduling.config.CronTask;

import org.springframework.scheduling.config.ScheduledTask;

import org.springframework.scheduling.config.ScheduledTaskRegistrar;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.List;

/**

* @author Created by niugang on 2019/12/24/15:19

*http:///

@Configuration

@EnableScheduling

@Slf4j

public class CompleteScheduleConfig implements SchedulingConfigurer {

private static List taskRecordList = new ArrayList<>();

/*

*模拟数据库存储

*/

static {

TaskRecord taskRecord = new TaskRecord();

tYBnMidobVaskRecord.setExecuteMehod("task1");

taskRecord.setClassPath("com.example.demo.pojo.TaskTest");

taskRecord.setCron("0/5 * * * * ?");

taskRecordList.add(taskRecord);

TaskRecord taskRecord2 = new TaskRecord();

taskRecord2.setExecuteMehod("task2");

taskRecord2.setClassPath("com.example.demo.pojo.TaskTest2");

taskRecord2.setCron("0/10 * * * * ?");

taskRecordList.add(taskRecord2);

}

@Override

public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

// taskRegistrar.addCronTask(() -> log.info("执行定时任务,{}", LocalDateTime.now()), "0/5 * * * * ?");

/* taskRegistrar.addCronTask(new Runnable() {

@Override

public void run() {

try {

Class> aClass = Class.forName("com.example.demo.pojo.TaskTest");

Object o = aClass.newInstance();

Method[] declaredMethods = aClass.getDeclaredMethods();

for (Method declaredMethod : declaredMethods) {

declaredMethod.invoke(o);

// log.info("方法名称:{}",declaredMethod.getName());

}

} catch (Exception e) {

e.printStackTrace();

}

}

}, "0/5 * * * * ?");*/

for (TaskRecord taskRecord : taskRecordList) {

String classPath = taskRecord.getClassPath();

String cron = taskRecord.getCron();

String executeMehod = taskRecord.getExecuteMehod();

Runnable runnable = () -> {

Class> aClass;

try {

aClass = Class.forName(classPath);

Object o = aClass.newInstance();

Method[] declaredMethods = aClass.getDeclaredMethods();

for (Method declaredMethod : declaredMethods) {

if (declaredMethod.getName().equals(executeMehod)) {

/// log.info("方法名称:{}",declaredMethod.getName());

declaredMethod.invoke(o);

}

}

} catch (Exception e1) {

e1.printStackTrace();

}

};

CronTask cronTask = new CronTask(runnable, cron);

ScheduledTask scheduledTask = taskRegistrar.scheduleCronTask(cronTask);

//scheduledTask.cancel(); 取消定时任务

}

}

@Data

private static class TaskRecord {

private String classPath;

private String executeMehod;

private String cron;

//可以在增加一个type 执行其他类型的定时任务

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring实战之@Autowire注解用法详解
下一篇:springboot自定义异常视图过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~