springboot--异步执行的方法及定时执行的方法
让方法被调用后异步的执行
一般来说,要异步执行一个任务都是创建一个线程来专门干这个任务。在springboot中有 @Async 这个注解快速实现方法的异步执行。只需要两步:第一步: 在启动类上加上@EnableAsync注解,表示这个程序支持异步的方法。如下:
@EnableAsync
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
第二步:在service层的类的方法上写上@Async注解,表示这个方法是异步执行的。如下:
@Service
public class MyService {
@Async
public void doA() {
//doSomething
}
}
这样,doA()方法被外部调用后就是异步执行的了。
注意:1. 要想使被调用的方法确实是异步的执行,必须是外部调用,在本类的内部其他方法调用此方法仍然是同步的。也因此,异步方法必须是public修饰。
2.关于返回值: 由于是异步执行方法,这个方法被调用后因此我们也无法知道它什么时候执行完毕。因此在异步方法前加上返回值是会出问题的。例如:
@Service
public class MyService {
@Async
public Integer doA() {
//doSomething
return 1;
}
}
--------------------------------------
public class Test {
public static void main(String[] args) {
MyService ms = new MyService();
System.out.println(ms.doA()); //尝试调用异步方法 doA 获得返回值,并输出
}
}
这样是不能正常获得doA()方法的返回值的,因为在我们输出doA()的返回值时,doA()甚至可能一行代码都没执行完毕。
所以如果异步方法不是void返回类型,为其他返回类型时被调用一律直接返回 null,如果返回类型是基本数据类型由于返回的是 null 则可能抛出装箱异常。
如果确实需要获取异步方法的返回值,则需要使用Future类:
@Service
public class MyService {
@Async
public Future<Integer> doA() { //使用Future类接收返回值
//doSomething
return 1;
}
}
Future类的具体用法这里不讲。
让方法定时的执行
要将一个方法变为定时执行,步骤与上面一样,首先在启动类上加注解 @EnableScheduling,然后在具体的方法上加上 @Scheduled 注解即可。要使用@Scheduled注解完成目标,主要是要熟练使用注解的参数。

(图片来源于葛香东视频课 《springboot 编写restful api》)
cron是按指定时钟定时执行,一般需要搭配zone指定时区。
其他三个参数则是方法按指定频率或间隔执行。
cron是一个字符串,用来表示定时执行的具体规则。从左至右分别为 “秒 分 时 日 月 星期几 年” 年可为空 ,表示任意年。

举例:

springboot--异步执行的方法及定时执行的方法的更多相关文章
- ASP.NET MVC计划任务实现方法(定时执行某个功能)
系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...
- ASP.NET MVC4计划任务实现方法(定时执行某个功能)
系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...
- 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行
可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时 在脚本 ...
- (转载)php中实现定时执行计划任务方法
(转载)http://www.111cn.net/phper/php/41216.htm PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设 ...
- mysql定时执行及延时执行,实现类似sql server waitfor功能
熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行.在我们测试功能和定时执行的时候特别有用 ...
- windows上定时执行php文件
<?php $fp = fopen("E:/wwwroot/test/plan.txt", "w+"); fwrite($fp, date("Y ...
- 操作系统定期定时执行python脚本
1. Windows 控制面板 --> 管理工具 -->任务计划程序 --> 创建任务 接下来就是设置执行的时机以及脚本路径等 1>>常规 设置任务名称描述,以及是否执行 ...
- SpringBoot中使用@scheduled定时执行任务需要注意的坑
spring boot: 计划任务@ EnableScheduling和@Scheduled @Scheduled中的参数说明 @Scheduled(fixedRate=2000):上一次开始执行时间 ...
- 定时执行任务-springboot
定时执行任务-springboot 先看两个接口 这两个接口springboot已经帮我们封装好了,我们不需要去手动使用 TaskScheduler //任务调度者 TaskExecutor //任务 ...
随机推荐
- jetty 启动时出现的问题
启动时出现: 1. NoClassDefFoundError: javax/xml/registry/infomodel/User 是需要导入jaxr-api包, <dependency> ...
- CDQ求子矩阵的和
Description维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=20000 ...
- Windows下使用python3 + selenium实现网页自动填表功能
本文由博主(SunboyL)原创,转载请注明出处:https://www.cnblogs.com/SunboyL/p/11563345.html 因为工作原因,需要将xls文件的数据录入到网上.因为数 ...
- 【SQL SERVER】 搭建AlwaysON高可用组
项目需要保障数据的高可用,于是可选的方案无非是Oracle集群. 传统的主从+心跳切换访问点以及SQL Server AlwaysOn这类方案.(//经验不多,了解和实践过的方案就这类,轻拍) Ora ...
- VMware 虚拟机的虚拟磁盘编程知识点扫盲之一
目录 目录 前言 VMware 虚拟机文件类型 VMware 虚拟机的快照 Quiseced Snapshot Quiseced Snapshot 的创建过程 创建快照 创建快照的执行过程及原理 删除 ...
- delphi 语法 点滴总结clientdataset
clientdataset 记录数 是从1 开始的. self.ClientDataSet5.RecNo 记录数 可以 读写 赋值. 随意改动. 哈哈 很方便.
- c# WPF——完成一个简单的百度贴吧爬虫客户端
话不多说先上图 爬取10页大概500个帖子大概10s,500页2w多个帖子大概2min,由此可见性能并不是特别好,但是也没有很差. 好了话不多说,我们来一步一步实现这么个简易的客户端. 1.创建项目 ...
- C# picturebox 加载图片后透明显示在另一控件之上
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Http Handler 介绍
引言 在 Part.1 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理.我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpMod ...
- final关键字的案例
package com.company.java.oop.cls; class ClassF { // static ClassF instance =new ClassF(); static { S ...