@RestController @RequestMapping("api/v1/scheduler") public class TestController { @Autowired private ApplicationContext applicationContext; private String methodFullName = ""; private ConcurrentHashMap<String, ScheduledFuture<?>> scheduledFutureMap= new ConcurrentHashMap<>(); @GetMapping("/test") public String test(String sch) throws NoSuchFieldException, IllegalAccessException { ScheduledAnnotationBeanPostProcessor postProcessor = applicationContext.getBean(ScheduledAnnotationBeanPostProcessor.class); Field registrar = postProcessor.getClass().getDeclaredField("registrar"); registrar.setAccessible(true); ScheduledTaskRegistrar taskRegistrar = (ScheduledTaskRegistrar)registrar.get(postProcessor); TaskScheduler scheduler = taskRegistrar.getScheduler(); Set<ScheduledTask> scheduledTaskSet = postProcessor.getScheduledTasks(); for (ScheduledTask scheduledTask : scheduledTaskSet){ if (scheduledTask.getTask().getRunnable().toString().equals(methodFullName)){ scheduledTask.cancel(); CronTask cronTask = new CronTask(scheduledTask.getTask().getRunnable(), sch); if (scheduledFutureMap.containsKey(methodFullName)){ ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(methodFullName); scheduledFuture.cancel(true); } ScheduledFuture<?> scheduledFuture = scheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger()); scheduledFutureMap.put(methodFullName, scheduledFuture); } } return "hello test"; } @Scheduled(cron = "0/1 * * * * ? ") public void sch(){ System.out.println("测试定时任务==" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } }
运行时动态修改@Scheduled注解的定时任务
最新推荐文章于 2024-03-28 13:18:20 发布