Spring Boot中几种定时任务
Timer类
public static void main(String[] args){
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("Timer方式执行一次定时任务");
}
};
new Timer().schedule(timerTask,1,2*1000);
}
ScheduledExecutorService类
ScheduledExecutorService,是基于线程设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去并行执行
public static void main(String[] args){
ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
scheduledExecutor.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
System.out.println("ScheduledExecutorService方式执行一次定时任务");
}
}
,0,5, TimeUnit.SECONDS);
}
Quartz
-
引入quartz依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
-
配置JobDetail和Trigger
@Configuration public class QuartzConfig { @Bean public JobDetail quartzDetail(){ return JobBuilder.newJob(QuartzTest.class).withIdentity("QuartzTest").storeDurably().build(); } @Bean public SimpleTrigger quartzTrigger(){ SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever(); //CronScheduleBuilder cron= CronScheduleBuilder.cronSchedule("0/10 * * * * ?"); return TriggerBuilder.newTrigger().forJob(quartzDetail()) .withIdentity("QuartzTest") .withSchedule(scheduleBuilder) .build(); } }
-
测试
public class QuartzTest extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext){ System.out.println("quartz执行一次定时任务 "); } }
Scheduled注解
-
Spring3.0以后自带的task,在启动类上使用@EnableScheduling开启定时任务支持
-
使用
@Component public class ScheduledTest { private Logger logger = LoggerFactory.getLogger(ScheduledTest.class); /** * 每3秒执行一次定时任务 */ @Scheduled(fixedRate = 3000) public void testCron(){ logger.info("Scheduled 执行一次定时任务"); } }
-
@Scheduled(initialDelay = 1000, fixedRate = 3000) 第一次延迟1秒后执行,之后按 fixedRate 的规则每 3 秒执行一次
-
@Scheduled(cron = "0/10 * * * * ? ")通过 cron 表达式定义规则
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
2020-04-15 python爬取豆瓣电影top250