自动
一: 导入依赖
<!--定时任务-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
二: 启动类加注解:
@EnableScheduling
三: 写一个任务类
package org.springeos.modules.Scheduled.controller;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class TestSchedule2 {
// cron表达式和任务内容都有可以根据自己的实际情况进行修改
@Scheduled(cron = "0/10 * * * * *")
public void work(){
System.out.println("启动就执行的定时任务!--------每十秒执行一次"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
这种方式是项目启动的时候会执行一次,然后每过10秒执行一次
手动控制开关
一: 导入依赖和在控制器上添加依赖与上见面的一样
二: 写一个任务类实现Runnable接口
package com.lemon.schedule;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyRunnable1 implements Runnable {
@Override
public void run() {
System.out.println("需要手动启动的定时任务,每十秒执行一次" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
三: 写一个控制开关的controller
package com.lemon.controller;
import com.lemon.schedule.MyRunnable1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
/**
* 定时任务启动和停止
*/
@RestController
@RequestMapping("/quartz/task")
public class TestSchedule1 {
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> future1;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
@GetMapping("/startCron")
public String startCron1() {
future1 = threadPoolTaskScheduler.schedule(new MyRunnable1(),new Trigger(){
@Override
public Date nextExecutionTime(TriggerContext triggerContext){
return new CronTrigger("0/10 * * * * *").nextExecutionTime(triggerContext);
}
});
System.out.println("定时任务正在执行-----");
return "定时任务启动成功!";
}
@GetMapping("/stopCron")
public String stopCron1() {
if (future1 != null) {
future1.cancel(true);
}
System.out.println("定时任务关闭");
return "定时任务关闭成功!";
}
}
Cron表达式在线生成工具
http://www.bejson.com/othertools/cron/
本文介绍了如何在Spring Boot中配置定时任务,包括使用`@Scheduled`注解实现自动定时任务,以及通过`ThreadPoolTaskScheduler`手动控制任务的启动和停止。示例代码展示了如何设置Cron表达式以每10秒执行一次任务,以及如何在Controller中通过GET请求启动和停止任务。
831

被折叠的 条评论
为什么被折叠?



