SpringBoot 定时器简单使用,实现任务调度

简介: SpringBoot 定时器简单使用,实现任务调度

说到简单, 实现定时器的方法其实蛮多, 我个人在探索了一下之后,任务,最简单的就是注解了。(因为我不想搞那些杂七杂八的配置,我就想实现一下下为所欲为的控制方法执行而已)


--------------入正题--------------------------------------


①在springboot的main中开启 定时器注解:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
/* 开启定时任务注解 */
@EnableScheduling
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class abcApplication {
   public static void main(String[] args) {
      SpringApplication.run(abcApplication.class, args);
   }
}


②新建一个Service,我这边只单纯为了举例,就不分什么impl了:


/**
 * @Author: JCccc
 * @CreateTime: 2018-09-21
 * @Description: 定时器任务测试
 */
@Service
public class TaskService {
   //方法
}


③在刚才建的Service类里面,开始添加方法,并使用@Scheduled  (这个用于定时器调度) :

举几个例子 做介绍:


@Scheduled(cron = "0 */1 * * * * ")
 public void reportCurrentByCron(){ 
System.out.println ("定时每分钟执行一次 : " + dateFormat().format (new Date ())); 
}


@Scheduled(fixedDelayString="5000")
public void delayLoop(){
    System.out.println("延迟5秒运行一次 :"+ dateFormat().format (new Date ()));
}


@Scheduled(fixedRate=1000)
public void delayLoop(){
    System.out.println("每秒运行一次 :"+ dateFormat().format (new Date ()));
}


@Scheduled(fixedDelay=1000)
public void delayLoop(){
    System.out.println("每秒运行一次 :"+ dateFormat().format (new Date ()));
}


@Scheduled(fixedRate=1000,initialDelay=2000)
 public void delayLoop(){
  System.out.println("运行后延迟2秒运行,再每隔一秒运行一次 :" + dateFormat().format(new Date()));
}


@Scheduled(cron = "0,1,2,3,4,5,6 * * * * MON-SAT")//每分钟的前面0,1,2,3,4,5,6秒都执行一次
public void runTask(){
        System.out.println("定时每分钟的前6秒发送推报 :" + new Date());
}


以上例子,看打印里面的中文就知道什么作用了。那么,我接下来介绍一下下。


首先,如果你认真看上面的例子,你就会发现,fixedRate 和 fixedDelay 这两个东西好像都是隔多少秒循环执行。


介绍及区别说明:


FixedRate----- > @Scheduled(fixedRate=5000)


第一个任务开始时间秒数为00:00:30;那么在5秒之后,35秒的时候,第二个任务就会立刻执行的。 若第一个任务执行划分10秒,第二个任务的执行并不会受影响,还是会在00:00:35秒的时候执行。


FixedDelay---- > @Scheduled(fixedDelay=5000)


第一个任务开始时间秒数为00:00:30;那么第二个任务执行的时候,必须是第一个任务执行完再等5秒之后才能执行。 若第一个任务执行花费10秒,那么就说00:00:40+5秒,也就是00:00:45秒的时候,第二个任务才会执行。


划重点!!!以下内容:--------------------------------------------!!!!!!!!!!!!---------------------------------------


上面都是关于定时器怎么调用的, 那么怎么关闭呢。


简单暴力,我举个例:


思路一:


private static boolean isStop=true;//先搞个全局变量,默认是true


 @Scheduled(cron = "0 */1 *  * * * ")
    public void reportCurrentByCron(){
     if(isStop) {
         System.out.println("定时每分钟执行一次 : " + dateFormat().format(new Date()) + " " + isStop);
        }
    }


//上面可以看到, 在定时任务里面,加了个判断isStop,也就是说,默认是true,默认是允许定时器开的。


当你想将定时任务关闭,那么只需要思考在什么时候怎么把这个值变为false就可以。


思路二:


从数据库或者配置文件读取是否执行逻辑的开关值,那么若想停止,只需修改数据库的值或是配置文件的值。


好了,介绍完毕。

相关文章
|
4月前
|
运维 监控 Java
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
|
5月前
|
Java 调度 Docker
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
126 0
|
存储 数据可视化 Java
SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来
前言 传统定时器是硬编码。但是有的时候业务上需要不断地调整 问题描述 我们开发了一个定闹钟的功能。这个功能肯定是定时器开发。但是这就存在一个问题这个定时是动态的。那么我们如何实现呢?请接着看
|
JavaScript Java Spring
Spring Boot中定时器注解 && 同步 异步 阻塞 非阻塞
Spring Boot中定时器注解 && 同步 异步 阻塞 非阻塞
129 0
|
存储 Java 调度
Spring Boot定时器动态cron表达式
Spring Boot定时器动态cron表达式
406 0
|
Java Spring
SpringBoot 中实现配置和使用定时器_张童瑶的博客
简单两步,实现在spring boot中配置和使用定时器:1、在入口类中加入@EnableScheduling注解(即springboot启动类添加注解@EnableScheduling)。2、创建定时器类,类中的方法注解了@Scheduled就是一个定时器,我这里谢了两个定时器,你们用一个也行。
181 0
|
XML druid 前端开发
【SpringBoot技术指南】「开发实战系列」动态化Quartz任务调度机制+实时推送任务数据到前端
【SpringBoot技术指南】「开发实战系列」动态化Quartz任务调度机制+实时推送任务数据到前端
287 0
【SpringBoot技术指南】「开发实战系列」动态化Quartz任务调度机制+实时推送任务数据到前端
Java:SpringBoot集成JWT实现token验证
Java:SpringBoot集成JWT实现token验证
412 0
Java:SpringBoot集成JWT实现token验证
|
消息中间件
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
|
开发框架 前端开发 JavaScript
Springboot+Vue实现物业管理系统
使用SpringBoot+Mybatis+BootStrap+Layui+VUE制作的智慧小区物业管理系统。本系统采用了 B/S 架构,Java、Html、Css、Js 等技术,使用了主流的后台开发框架SpringBoot(SpringMVC+Spring+Mybatis),前端开发框架使用了 LayUI、Vue、JQuery 以及 Vue的前端组件库 Element-UI,采用了开源的轻量级数据库 Mysql 进行开发。实现了小区管理、房产管理、设备管理、业主管理、服务管理、车位管理等主要功能。...
600 0
Springboot+Vue实现物业管理系统