当前位置: 首页 > news >正文

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

如果想了解动态调度定时任务可以看我这篇:

https://mp.csdn.net/console/editor/html/107038022

该篇属于入门级使用。

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

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

①在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就可以。

思路二:

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

好了,介绍完毕。

该篇是使用config类的方式实现的springboot使用定时任务,如果不习惯该篇的注解方式,可以去看这篇:

https://blog.csdn.net/qq_35387940/article/details/104749059

相关文章:

  • IDEA 底下的indexing一直自动刷新刷新刷新刷新的解决方案
  • SpringBoot 项目启动出错:Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedde
  • Springboot使用Cookie,生成cookie,获取cookie信息(注解与非注解方式)
  • Springboot最简单的整合使用Mongodb案例
  • IDEA 设置 快速生成serialVersionUID
  • springboot 最简单的日志打印,输出日志文件 及全局异常捕获处理
  • SpringBoot 最简单的使用异步线程案例 @Async
  • Springboot中 使用request的几种方法。
  • 使用WebStorm 报错解决方法!!Unable to save settings: Failed to save settings (内含注册码破解码)
  • Angular7 关于Bootstrap4.x.x版本无法使用Glyphicons 字体图标 简单解决方案
  • springboot 获取访问接口的请求的IP地址
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • 什么是Kafka
  • Springboot 线程同步之Semaphore 的简单使用
  • JAVA Gson的使用
  • 【翻译】babel对TC39装饰器草案的实现
  • 2017 前端面试准备 - 收藏集 - 掘金
  • android图片蒙层
  • flask接收请求并推入栈
  • gcc介绍及安装
  • HashMap ConcurrentHashMap
  • QQ浏览器x5内核的兼容性问题
  • Redis字符串类型内部编码剖析
  • sessionStorage和localStorage
  • Vue 2.3、2.4 知识点小结
  • 记录一下第一次使用npm
  • 将 Measurements 和 Units 应用到物理学
  • 浏览器缓存机制分析
  • 追踪解析 FutureTask 源码
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 移动端高清、多屏适配方案
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​虚拟化系列介绍(十)
  • ###STL(标准模板库)
  • #100天计划# 2013年9月29日
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三)Honghu Cloud云架构一定时调度平台
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • . Flume面试题
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net MVC + EF搭建学生管理系统
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net程序帮助文档制作
  • .NET和.COM和.CN域名区别
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .ui文件相关