指定一个时间,完成定时任务
有时候需要写一个定时触发的任务,例如设置公告定时发送
这里使用了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、测试
发送请求,等待时间到达
测试成功!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)