springBoot定时任务和异步调用

springboot定时任务
在创建好的springboot项目的启动类上加@EnableScheduling注解。

@EnableScheduling
@SpringBootApplication
@MapperScan("com.qianlong.dao")
@ComponentScan(value = "com.qianlong")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

然后创建一个定时任务类,加上@Scheduled注解。

@Component
public class TestController {
@Scheduled(cron = "0/1 * * * * ?")    或者是这样的@Scheduled(fixedDelay = 2000)   或者是这样 @Scheduled (fixedRate = 2000)
    public void test(){
    System.out.println("执行定时任务的时间是:"+new Date());
}
}

然后控制台会每隔一秒打印一次。
Cron表达式

0/30 * * * * * 每30秒执行一次
0 0/5 * * * * 每5分钟执行一次
0 0 0 * * * 每天凌晨执行
0 0 8,12,17 * * * 每天8点,12点,17点整执行
0 30 3-5 * * * 每天3到5点,30分时执行

关于@scheduled 的参数有多种方式,可以根据自己的需求来进行选择。
@Scheduled(fixedRate=1000):上一次开始执行时间点后1秒再次执行;
@Scheduled(fixedDelay=1000):上一次执行完毕时间点后1秒再次执行;
@Scheduled(initialDelay=1000, fixedDelay=1000):第一次延迟1秒执行,然后在上一次执行完毕时间点后1秒再次执行;
@Scheduled(cron=”* * * * ?”):根据书写的cron规则执行。

关于cron 表达式
cron一共有7位,但是最后一位是年,可以留空,所以我们可以写6位:

  • 第一位,表示秒,取值0-59
  • 第二位,表示分,取值0-59
  • 第三位,表示小时,取值0-23
  • 第四位,日期天/日,取值1-31
  • 第五位,日期月份,取值1-12
  • 第六位,星期,取值1-7,星期一,星期二…,注:不是第1周,第二周的意思
  • 另外:1表示星期天,2表示星期一。
  • 第7为,年份,可以留空,取值1970-2099
  • (*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年…
  • (?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,
    我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。
    比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。
  • (-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12
  • (,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四
  • (/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:* /y,等同于0/y
  • 0 0 3 * * ? 每天3点执行
  • 0 5 3 * * ? 每天3点5分执行
  • 0 5 3 ? * * 每天3点5分执行,与上面作用相同
  • 0 5/10 3 * * ? 每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行

springBoot异步调用
在创建好的springboot项目的启动类上加@EnableAsync注解。

@EnableAsync  //开启异步调用
@EnableScheduling
@SpringBootApplication
@MapperScan("com.qianlong.dao")
@ComponentScan(value = "com.qianlong")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

注意在这里一定要加上@EnableAsync注解开启异步调用
新建一个controller

@RestController
@RequestMapping("/demo")
public class SelectController {
@Autowired
private SelectService selectService;
@RequestMapping("/async")
    public void as(){
    System.out.println("1111111111");
    selectService.add();
    System.out.println("2222222222");
}
}

再建一个service

@Service
public class SelectService {

    @Async
    public void add() {
        System.out.println("333333333");
        System.out.println("444444444");
    }
}

先注释掉@EnableAsync和@Async两个注解,在浏览器输入localhost:8080/demo/async,看下同步调用执行的效果。执行结果如下

11111111
33333333
44444444
22222222

再把两个注解放开,在浏览器输入localhost:8080/demo/async,看下异步调用执行的效果。

11111111
22222222
33333333
44444444

原文地址:https://www.cnblogs.com/fantongxue/p/12443309.html

时间: 2024-11-08 02:48:25

springBoot定时任务和异步调用的相关文章

spring boot 1.5.4 定时任务和异步调用(十)

上一篇:spring boot1.5.4 统一异常处理(九) 1      Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. spring boot定时任务spring-boot-jsp项目源码: https://git.oschina.net/wyait/springboot1.5.4.git 1.1  创建定时任务 在Spring Boot中编写定时

170719、springboot编程之异步调用@Async

1.在pom.xml中增加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 2.在主类上开启注解 package com.rick; import org.springframework.boot.SpringApplication; imp

SpringBoot整合定时任务和异步任务处理

SpringBoot定时任务schedule讲解 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类 timer:配置比较麻烦,时间延后问题,不推荐 timertask:不推荐 2.Quartz框架(复杂定时任务可以使用,spring 或springmv项目) 配置更简单 xml或者注解 具体说明后续...... 3.SpringBoot使用注解方式开启定时任务(springboot项目推荐使用) 1)启动类里面 @EnableSched

SpringBoot系列:Spring Boot异步调用@Async

在实际开发中,有时候为了及时处理请求和进行响应,我们可能会多任务同时执行,或者先处理主任务,也就是异步调用,异步调用的实现有很多,例如多线程.定时任务.消息队列等, 这一章节,我们就来讲讲@Async异步方法调用. 一.@Async使用演示 @Async是Spring内置注解,用来处理异步任务,在SpringBoot中同样适用,且在SpringBoot项目中,除了boot本身的starter外,不需要额外引入依赖. 而要使用@Async,需要在启动类上加上@EnableAsync主动声明来开启异

springboot 异步调用Async使用方法

引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将介绍在springboot中如何使用@Async. 1.pom.xml中导入必要的依赖: <parent> <groupId>org.springframework.boot</groupId> <artifa

SpringBoot整合定时任务和异步任务处理 3节课

1.SpringBoot定时任务schedule讲解   定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类             timer:配置比较麻烦,时间延后问题             timertask:不推荐 2.Quartz框架             配置更简单             xml或者注解 3.SpringBoot使用注解方式开启定时任务             1)启动类里面 @Ena

SpringBoot中异步请求和异步调用(看这一篇就够了)

一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应.一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲). 2.异步请求的实现 方式一:Servlet方式实现异步请求

SpringBoot系列——@Async优雅的异步调用

前言 众所周知,java的代码是同步顺序执行,当我们需要执行异步操作时我们需要创建一个新线程去执行,以往我们是这样操作的: /** * 任务类 */ class Task implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + ":异步任务"); } } //新建线程并执行任务类 new Thread(new Task()).sta

spring-boot实战【10】【转】:Spring Boot中使用@Async实现异步调用

什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序. 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16