seo站内站怎么做,网站分类有哪几类,wordpress文章地址,建设工程获奖查询网站前言
springboot中设置定时任务有三种常见的方式#xff0c;分别为#xff1a;
基于Scheduled注解。基于Quartz框架。基于xxl-job框架。
下面将分别阐述下这三种方式的实现方式和优缺点。
1. Scheduled
介绍
Scheduled注解是Spring Framework提供的一个非常简单的创建定…前言
springboot中设置定时任务有三种常见的方式分别为
基于Scheduled注解。基于Quartz框架。基于xxl-job框架。
下面将分别阐述下这三种方式的实现方式和优缺点。
1. Scheduled
介绍
Scheduled注解是Spring Framework提供的一个非常简单的创建定时任务的方法将注解添加在方法。Spring Boot会自动配置一个任务调度器来执行这些方法。
但需要在Spring Boot应用的主类或配置类上添加EnableScheduling注解来启用定时任务的自动配置。然后你可以在任何Spring管理的bean上使用Scheduled注解来声明定时任务。
代码实现
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;Component
public class ScheduledTasks {Scheduled(fixedRate 5000)public void taskWithFixedRate() {// 任务逻辑}Scheduled(cron 0 * * * * ?)public void taskWithCronExpression() {// 任务逻辑}
}Scheduled(fixedRate 5000)是taskWithFixedRate()方法每5秒执行一次。
Scheduled(cron 0 * * * * ?)是taskWithCronExpression()方法根据cron表达式执行。
优点
简单易用: 只需在方法上添加Scheduled注解即可无需复杂配置。无需额外依赖: Spring框架内置支持不需要添加额外的库。集成度高: 与Spring生态系统无缝集成易于与其他Spring组件协作。
缺点
功能有限不支持持久化存储任务状态不适合复杂的调度需求。不支持分布式: 无法在多个服务实例之间同步任务状态不适合分布式系统。缺乏动态控制: 任务调度一旦设定无法在运行时动态修改除非重新部署应用。
2. 基于Quartz框架
介绍
Quartz是一个开源的作业调度库可以集成到几乎任何Java应用程序中。它提供了丰富的调度选项包括一次性执行、按照固定间隔重复执行以及基于日历的作业调度。
代码实现
导入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactIdversion${spring.version}/version/dependency写任务逻辑
package com.account.job;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;/*** author Hao* date 2023-11-06 17:00*/
Component
public class UsernameJob implements Job {Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {// 任务逻辑}
}配置定时器
package com.account.config;import com.account.job.UsernameJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** author Hao* date 2023-11-06 14:58*/
Configuration
public class UsernameQuartzConfig {Beanpublic JobDetail userLogJob() {return JobBuilder.newJob(UsernameJob.class).storeDurably(true).build();}Beanpublic Trigger usernameJobTrigger() {return TriggerBuilder.newTrigger().forJob(userLogJob()).withSchedule(CronScheduleBuilder.cronSchedule(0 30 * * * ?)) //每30分钟执行一次.build();}
}
优点
功能强大: 支持复杂的调度需求如任务持久化、事务管理、错过任务的处理等。支持分布式: 可以在多个节点上同步任务状态适合分布式部署。灵活性: 支持动态添加、修改和删除任务以及更复杂的cron表达式。
缺点
配置复杂: 相较于Scheduled注解Quartz需要更多的配置工作。资源消耗: 因为功能强大Quartz可能会消耗更多的系统资源。学习曲线: 对于新手来说Quartz的API和配置可能需要一定的学习时间。
3. 基于xxl-job框架
介绍
xxl-job是一个分布式任务调度平台其核心设计目标是开发简单、易扩展、分布式的任务调度解决方案。xxl-job在企业级别的分布式任务调度场景中非常受欢迎。
代码实现
搭建linux服务搭建教程
导入依赖 xxl-job.version2.3.1/xxl-job.versiondependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job-core/artifactIdversion${xxl-job.version}/version/dependencyyml配置文件
#XXL-job配置
xxl:job:admin:addresses: http://192.168.133.100:9898/xxl-job-adminaccessToken: default_tokenexecutor:# 执行器AppName [选填]执行器心跳注册分组依据为空则关闭自动注册appname: xxl-job-executor-sample# 执行器端口号 [选填]小于等于0则自动获取默认端口为9999单机部署多个执行器时注意要配置不同执行器端口port: 9998
配置类
package com.replication.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** author Hao* date 2023-12-04 11:07*/
Configuration
public class XxlJobConfig {Value(${xxl.job.admin.addresses})private String adminAddresses;Value(${xxl.job.accessToken})private String accessToken;Value(${xxl.job.executor.appname})private String appName;Value(${xxl.job.executor.port})private int port;Beanpublic XxlJobSpringExecutor xxlJobSpringExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setAppname(appName);xxlJobSpringExecutor.setPort(port);return xxlJobSpringExecutor;}
}注解使用
XxlJob(helloXxl)
public void xxlJob() {log.debug(xxlJob运行当前时间{}, LocalDateTime.now());
}优点
分布式支持: 设计之初就考虑了分布式场景适合大规模分布式任务调度。任务管理: 提供了管理界面可以方便地对任务进行管理和监控。高可用性: 支持故障转移和集群部署提高了任务调度的可靠性。扩展性: 支持自定义任务类型可以根据需要扩展任务执行逻辑。
缺点
依赖外部服务: 需要部署xxl-job-admin服务来管理任务增加了系统复杂性。额外学习: 需要学习xxl-job的使用和配置与Spring Boot的集成程度不如Scheduled注解。资源消耗: 由于提供了丰富的功能和管理界面可能会消耗更多的资源。
总结
在选择定时任务框架时你应该根据你的应用场景和需求来决定。如果你的应用简单不需要分布式调度和任务持久化那么Scheduled注解可能是最简单的选择。如果你需要更复杂的调度功能或者你的应用是分布式的那么Quartz或xxl-job可能更适合。xxl-job特别适合于需要集中管理和监控任务的大型分布式系统。