SpringBoot学习——定时任务

SpringBoot实战项目学习(12)——集成Quartz定时任务 文章目录项目结构pom.xml什么是Quartz通用类ApiResponse实体类entityJobAndTrigger任务与触发器JobForm定时任务详情Job类项目Job接口Job实现类HelloJobJob实现类TestJob持久化层JobMapperxml文件JobMapper.xmlservice层JobService接口实现类JobServiceImpl工具类JobUtil前端页面job.html测试 使用SpringBoot集成Quartz定时任务 基于GitHub项目xkcoding/* 阅读详情

在我们日常开发中,经常会遇到 数据定时增量同步、定时发送邮件、爬虫定时抓取 的需求;这时我们可以采用定时任务的方式去进行工作……

Timer 方式

JDK自带的java.util.Timer;通过调度java.util.TimerTask的方式 让程序按照某一个频度执行,但不能在指定时间运行。 一般用的较少。

基于 Timer 实现的定时调度,基本就是手撸代码,目前应用较少,不是很推荐。

package com.battcn.timer;

import java.time.LocalDateTime;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 基于Timer实现的定时调度(不推荐,用该方式不如用 ScheduledExecutorService )
 *
 * @author Levin
 * @since 2018/5/29 0029
 */
public class TimerDemo {

    public static void main(String[] args) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行任务:" + LocalDateTime.now());
            }
        };
        Timer timer = new Timer();
        // timerTask:需要执行的任务
        // delay:延迟时间(以毫秒为单位)
        // period:间隔时间(以毫秒为单位)
        timer.schedule(timerTask, 5000, 3000);
    }
}
基于 ScheduledExecutorService

与Timer很类似,但它的效果更好,多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中有一个因任务报错没有捕获抛出的异常,其它任务便会自动终止运行,使用 ScheduledExecutorService 则可以规避这个问题。

package com.battcn.scheduled;

import java.time.LocalDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 基于 ScheduledExecutorService 方式,相对的比 Timer 要好
 *  * @author Levin
 * @since 2018/5/29 0029
 */
public class ScheduledExecutorServiceDemo {

    public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
        // 参数:1、具体执行的任务   2、首次执行的延时时间
        //      3、任务执行间隔     4、间隔时间单位
        service.scheduleAtFixedRate(() -> System.out.println("执行任务A:" + LocalDateTime.now()), 0, 3, TimeUnit.SECONDS);
    }
}
Spring Task(本章关键)

@Scheduled 定时任务的核心

  • cron: cron表达式,根据表达式循环执行,与fixedRate属性不同的是它是将时间进行了切割。(@Scheduled(cron = “0/5 * * * * *”)任务将在5、10、15、20…这种情况下进行工作)
  • fixedRate: 每隔多久执行一次,无视工作时间(@Scheduled(fixedRate = 1000) 假设第一次工作时间为2018-05-29 16:58:28,工作时长为3秒,那么下次任务的时候就是2018-05-29 16:58:31)
  • fixedDelay: 当前任务执行完毕后等待多久继续下次任务(@Scheduled(fixedDelay = 3000) 假设第一次任务工作时间为2018-05-29 16:54:33,工作时长为5秒,那么下次任务的时间就是2018-05-29 16:54:41)
  • initialDelay: 第一次执行延迟时间,只是做延迟的设定,与fixedDelay关系密切,配合使用,相辅相成。

@Async 代表该任务可以进行异步工作,由原本的串行改为并行

package com.battcn.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 基于 Spring 自带的
 *
 * @author Levin
 * @since 2018/5/29 0029
 */
@Component
public class SpringTaskDemo {

    private static final Logger log = LoggerFactory.getLogger(SpringTaskDemo.class);

    @Async
    @Scheduled(cron = "0/1 * * * * *")
    public void scheduled1() throws InterruptedException {
        Thread.sleep(3000);
        log.info("scheduled1 每1秒执行一次:{}", LocalDateTime.now());
    }

    @Scheduled(fixedRate = 1000)
    public void scheduled2() throws InterruptedException {
        Thread.sleep(3000);
        log.info("scheduled2 每1秒执行一次:{}", LocalDateTime.now());
    }

    @Scheduled(fixedDelay = 3000)
    public void scheduled3() throws InterruptedException {
        Thread.sleep(5000);
        log.info("scheduled3 上次执行完毕后隔3秒继续执行:{}", LocalDateTime.now());
    }

}
主函数

@EnableScheduling 注解表示开启对@Scheduled注解的解析;同时new ThreadPoolTaskScheduler()也是相当的关键,通过阅读过源码可以发现默认情况下的 private volatile int poolSize = 1;这就导致了多个任务的情况下容易出现竞争情况(多个任务的情况下,如果第一个任务没执行完毕,后续的任务将会进入等待状态)。

@EnableAsync 注解表示开启@Async注解的解析;作用就是将串行化的任务给并行化了。(@Scheduled(cron = “0/1 * * * * *”)假设第一次工作时间为2018-05-29 17:30:55,工作周期为3秒;如果不加@Async那么下一次工作时间就是2018-05-29 17:30:59;如果加了@Async 下一次工作时间就是2018-05-29 17:30:56)

package com.battcn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;


/**
 * @author Levin
 */
@EnableAsync
@EnableScheduling
@SpringBootApplication
public class Chapter15Application {

    public static void main(String[] args) {
        SpringApplication.run(Chapter15Application.class, args);
    }

    /**
     * 很关键:默认情况下 TaskScheduler 的 poolSize = 1
     *
     * @return 线程池
     */
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(10);
        return taskScheduler;
    }
}
xxl-job

上面提到的方法都是在单机下可以使用的定时任务方式,但如果集群的话,定时任务会被重复执行。 xxl-job是其中一种的解决方式。他提供了分布式场景下对定时任务的管理,关于xxl-job我们会单独来学习。

SpringBoot系列:Spring Boot集成定时任务Quartz 首先定义定时具体执行逻辑Job,创建类QuartzJob1,这里集继承QuartzJobBean实现executeInternal即可,该方法即定时执行任务逻辑,这里简单打印了下当前时间。@Override然后创建QuartzConfig,接着定义JobDetail,JobDetail由JobBuilder构建,同时关联了任务QuartzJob1。@Bean。 阅读详情

相关推荐

spring boot 学习(八)定时任务 @Scheduled

SpringBoot 定时任务 @Scheduled 在 SpringBoot 框架下,我们可以用 Spring scheduling 来实现定时任务功能。

FunriLy 7116

SpringBoot实现定时任务的三种方式

解释一下这个里面的含义,首先task这个就是你要定时的一个任务,delay代表延迟多久执行,我们这里为了测试设置为0就就是不延迟,period就是每个多久执行一次,我们为了看到效果设置为2000,也就是2秒执行一次。在上面代码块中有我对这部分有对应的解释。其实在springboot中,已经为我们提供了一个完成定时任务的技术。好了这个时候我们利用javaAPI做的一个定时任务就是完成了,其实这个就是基于java多线程去做的。但是现在在我们企业级应用中定时任务的应用非常广泛,于是就出现了完成定时任务的技术。..

m0_67401761的博客 1万+

安卓App开发 篇三:Android SDK和API

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少模板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。hl=zh-cnhl=zh-cnWorkManager 是 Android Jetpack 的一部分,是用于持久性工作的推荐解决方案,适用于需要通过应用重启和系统重新启动来调度的工作,也是后台处理操作的主要推荐 API。立即执行:必须立即开始且很快完成的任务,可以加急,使用和Worker,通过对调用处理加急工作。

生活在别处 1240

SpringBoot动态定时任务(完整版)

完整版动态定时任务增删改启动暂停功能样样俱全,话不多说,直接看代码,你们直接CV就可以用!!!

学习学习学习 3万+

Spring Boot 定时任务学习

Spring boot 定时任务

weixin_46112857的博客 3140

从零开始学Spring Boot

<img src="https://img-bss.csdn.net/202002270305259551.jpg" alt="" />

springboot定时任务学习——@Scheduled

目录 前言: 1.cron 表达式 1.1 每一个域可出现的字符 1.2 关于定时任务的一些思考与用法 1.2.1 占位符 1.3 启动服务的时候就执行任务 1.4fixedDelay和fixedDelayString 1.5fixedRate和fixedRateString 1.6 initialDelay和initialDelayString 前言: 定时任务...

新一的技术笔记 534

springboot学习之路之定时任务使用简要

在这里插入图片描述

weixin_43965937的博客 141

【Spring Boot 2.0学习之旅-10】SpringBoot整合定时任务和异步任务处理

第十章 SpringBoot整合定时任务和异步任务处理 10-1 SpringBoot定时任务schedule讲解 1.定时器比较 什么是定时任务,使用场景 ? 比如八月十五,定时任务会轮询,加载到任务区里面,去检测 比如电商系统,下单量、访客、交易量,用于数据分析 某个时间定时处理某个任务 发邮件、短信等 消息提醒 订单通知 统计报表系统 … 常见定时任务 Java自带的java.util.Timer类配置比较麻烦,时间延后问题,有些BUG Quartz框架: 配置更简单,xml或者注解适合分布式或

Mind_programmonkey的博客 850

菜鸟学习SpringBoot——(八)定时任务

/*本人菜鸟一只,刚开始学习spring boot,按照导师给的学习计划整理的学习内容,希望能对和我一样是菜鸟,刚学习spring boot的童鞋有帮助。由于菜鸟一只,以下内容没有能力原创,里面的内容都是各种百度整理出来的(东拼西凑),所以作者数量太多,不方便注明,如有冒犯,我立马删帖。请各位大佬多多海涵!*/ 1、单体服务定时任务Spring Task 实现: 1、开启定时任务 启动类添加注解@EnableScheduling开启定时任务 2、添加定时任务 @Slf4j @Componen.

weixin_42110841的博客 240

Springboot实现定时任务——SpringBoot学习

  SpringBoot 实现定时任务有两种方式,其中包括有 Scheduled 定时器 和 整合 Quartz 定时任务框架,前者简单易上手,但功能较单一,但也能实现大部分需求,后者是一个强大的定时任务框架,但较复杂。接下来分别介绍这两种方式如何使用。 一、通过 Scheduled 定时器实现定时任务   Scheduled 是 Spring 款架提供的,自 Spring 3.0 开始就提供注解...

写Bug的小白的博客 461

Spring Boot定时任务学习笔记

在本篇笔记中,我们学习了Spring Boot定时任务的基本概念、使用方法和配置选项。定时任务可以帮助我们在特定的时间点或时间间隔内自动执行某些任务,提高应用的效率和准确性。希望这份笔记对你有帮助!

何必余生 242

Springboot定时任务Springboot学习八》

spring boot集成定时任务 定时任务或者说定时调度,是系统中比较普遍的一个功能,例如数据归档、清理,数据定时同步(非实时),定时收发,流量控制等等都需要用到定时任务,常见的定时调度框架有Quartz、TBSchedule等。 同样,Spring自3.0版本起也增加了任务调度功能Schedule,它好比是一个轻量级的Quartz,使用起来方便、简洁,且不需要依赖其他的JAR包。之所以说它是轻...

胃病的不良少彦 431

SpringBoot学习(九)--SpringBoot定时任务@Scheduled和动态定时任务

版权声明:作者原创,转载请注明出处。 本系列文章目录地址:http://blog.csdn.net/u011961421/article/details/79416510 简介 定时任务或者说定时调度,是系统中比较普遍的一个功能,例如数据归档、清理,数据定时同步(非实时),定时收发,流量控制等等都需要用到定时任务,常见的定时调度框架有Quartz、TBSchedule等。 ...

super-pf的博客 2万+

【系统学习SpringBootSpringBoot定时任务详解

强大的SpringBoot定时任务这种常用的功能做了很好的封装,,只需三步即可完成 一、添加依赖pom.xml文件中添加如下依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifact

小鼠标的博客 3640

springboot基础学习5:定时任务

一、在我们开发中经常会使用到定时任务来处理一些业务,而我们会使用不同的框架来实现任务的调度。 这里使用spring中封装的任务调度来与springboot进行整合 1、首先添加依赖 场景启动器 starter,这里使用的是2.1.4.RELEASE版本 pom.xml文件中添加依赖 <dependency> <groupId>org.springframework.bo...

有一种努力叫做靠自己 283

SpringBoot学习1.5-定时任务和异步调用

环境: jdk1.8;spring boot2.0.2;Maven3.3 摘要说明: 定时任务定时任务是业务场景中经常出现的一种情况如:定时发送邮件,短信、定时统计监控数据、定时对账等 异步调用:一个都买流程可能包括下单、发货通知、短信推送、消息推送等,其实除了下单这个主要程序是主程序,其他子程序可以同时进行且不影响主程序的运行,这个时候就可以使用异步调用来调用这些子程序; 步骤: ...

叶落自飘零的博客 1260

SpringBoot框架学习(十一)——任务

文章目录十五、SpringBoot与任务异步任务定时任务邮件任务 十五、SpringBoot与任务 搭建环境,暂且只选择Web模块 异步任务 首先在Service层建立一个我们的异步任务 定时任务 邮件任务 ...

0117 421

springboot学习——任务相关

文章目录task一、异步任务二、定时任务三、邮件任务 task 一、异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。 在主配置类上标注@EnableAsync开启异步支持 在需要异步运行的...

qq_36730158的博客 327

6、基因组数据可视化与甲基化分析:从基础操作到深入洞察

本文详细介绍了基因组数据可视化和全基因组DNA甲基化分析的方法和技术,包括基因组查看器(IGV)的基本操作、单核苷酸变异的可视化、DNA甲基化与CpG岛的关联分析、统计建模与显著甲基化区域识别,以及不同细胞系之间的甲基化模式差异分析。通过具体案例展示了如何利用MATLAB进行数据分析和可视化,为基因组研究、疾病机制探索及个性化医疗提供了技术支撑和实践参考。

qsc901234的博客 283

chrome-linux64.zip

124版本全平台chrome和chromedriver离线安装包,详细版本号:124.0.6318.0

上一篇: SpringBoot学习——全局处理异常
下一篇: 微服务
微笑看你哭
博客等级 码龄12年 92粉丝 72原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值