有时候需要写一个定时触发的任务,例如设置公告定时发送
这里使用了spring中的定时任务类,很轻松的就完成了所需要的功能
1、定时任务,按照自己需求进行业务逻辑编写
/**
* 定时任务
* @Author:tzl
* @Date:2023/12/20 17:47
*/
@Service
public class TaskService {
public void executeTask(String name) {
// 任务逻辑
System.out.println(new Date());
System.out.println(name + "发起的: ---TaskService执行任务---");
}
}
2、定时任务触发
/**
* 定时任务触发
* @Author:tzl
* @Date:2023/12/20 17:48
*/
@Service
public class TaskSchedulingService {
@Autowired
private TaskService taskService;
public void scheduleTask(Date taskTime,String name) {
TaskScheduler taskScheduler = new ConcurrentTaskScheduler();
taskScheduler.schedule(
// 新建线程,执行任务
() -> taskService.executeTask(name),
// 任务触发时间
taskTime
);
}
}
3、controller
/**
* 定时任务请求
* @Author:tzl
* @Date:2023/12/20 17:49
*/
@RestController
public class TaskController {
@Autowired
private TaskSchedulingService schedulingService;
@PostMapping("/scheduleTask")
public ResponseEntity<String> scheduleTask(String taskTime, String name) {
schedulingService.scheduleTask(getDate(taskTime),name);
return ResponseEntity.ok("成功加入定时任务");
}
/**
* 获取Date类型的时间
* @param taskTime 任务启动时间
* @return
*/
private Date getDate(String taskTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(taskTime, formatter);
// 将LocalDateTime转换为Instant
Instant instant = dateTime.atZone(ZoneId.systemDefault()).toInstant();
// 从Instant创建Date
Date date = Date.from(instant);
return date;
}
}
4、测试
发送请求,等待时间到达
测试成功!
标签:name,指定,任务,taskTime,Date,定时,public From: https://www.cnblogs.com/yaya-sama/p/17919319.html