手把手教你Spring boot创建定时任务及集成Quartz


来源于  https://baijiahao.baidu.com/s?id=1643116834093455970&wfr=spider&for=pc

每晚10点,捕获技术思考和创业资源洞察

当你想要放弃的那一刻,想想当初为什么坚持走到了这里

文|洪生鹏

客户有个需求,需要定时同步销售人员资料,刚开始打算用mysql定时任务实现,发现效果不太理想,于是选择用spring boot 中的定时创建任务来实现。关于SpringBoot创建定时任务很简单,一般有4种,下面我们一起来了解下:

Timer:这是java自带的java.util.Timer类,这个类允许我们调度一个java.util.TimerTask任务。可以让我们的程序按照某一个频度执行,不足之处是不能在指定时间运行。一般用的比较少。ScheduledExecutorService:也是jdk自带的类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,任务是并发执行,互不影响。Spring Task:是Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz。Quartz:这是一个功能比较强大的的调度器,可以让我们的程序在指定时间执行,也可以按照某一个频度执行,只不过配置起来稍微有点复杂。Timer

public class TaskTimer {public static void main(String[] args) {TimerTask timerTask = new TimerTask() { @Override public void run() {System.out.println("任务启动"+ new Date()); } }; Timer timer = new Timer(); //每10秒执行一次 timer.schedule(timerTask,10,10000); } }

对于ScheduledExecutorService和Spring Task不多谈。哪个配置比较麻烦,我们就来尝试哪种,重点来看一下Quartz实现定时任务。

Quartz

第一,我们在pom文件中添加依赖,如果SpringBoot版本是2.0.0以后的,则在spring-boot-starter中已经包含了quart的依赖,则可以直接使用spring-boot-starter-quartz依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>

要是1.5.9则要使用以下添加依赖:

<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId> <version>2.3.0</version></dependency> <dependency><groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>

接下来,我们创建任务类TestQuartz,主要继承了QuartzJobBean

public class TestQuartz extends QuartzJobBean {/** * 执行定时任务 * * @param jobExecutionContext * @throws JobExecutionException */@Override protected void executeInternal(JobExecutionContextjobExecutionContext) throws JobExecutionException {System.out.println("洪生鹏 quartz task " + new Date()); } }

创建配置类QuartzConfig

@Configurationpublic class QuartzConfig { @Bean public JobDetail teatQuartzDetail() { return JobBuilder.newJob(TestQuartz.class).withIdentity("testQuartz"). storeDurably().build(); } @Bean public Trigger testQuartzTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2) //设置时间周期单位秒 每隔两秒实行一次 .repeatForever(); return TriggerBuilder.newTrigger().forJob(teatQuartzDetail()).withIdentity("testQuartz") .withSchedule(scheduleBuilder) .build(); } }

Run项目,我们可以看到控制台打印出如下信息:

至此关于定时任务,我们就创建完成了。

以上简单地介绍了关于SpringBoot定时任务的处理,更多功能还需摸索。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM