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 //任务 ...
随机推荐
- Prototype js library
Prototype An object-oriented JavaScript framework Prototype is a JavaScript framework that aims to e ...
- SDK使用NinePatch(.9)资源
.9资源是啥? .9图是一种可以拉伸的图片格式,当你把它用作背景图时,android系统会根据实际情况来拉伸图片资源.比如按钮的背景必须根据上面显示文字的长短作拉伸.NinePatch就是额外包含了一 ...
- Unity各版本差异
Unity各版本差异 version unity 5.x 4.x 2017 差异 特点 首先放出unity的下载地址,然后再慢慢分析各个版本.再者unity可以多个版本共存,只要不放在同一目录下. ...
- leetcode 884. 两句话中的不常见单词 (python)
给定两个句子 A 和 B . (句子是一串由空格分隔的单词.每个单词仅由小写字母组成.) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的. 返回所有不常用单 ...
- java日期处理的一些例子使用...
一.计算成为会员多少天 需求:根据会员的创建日期createTime,计算成为会员多少天. 计算:当前日期 - 创建日期,转化为天数,即为成为会员多少天. 代码: public static void ...
- 浅谈Vue中的$set的使用
在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去: 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新 ...
- [Web 前端] 005 html 常用标签补充
少废话,上例子 1. 正常的字 <br> <tt>小一点的字体</tt> <br> <small>变小</small> < ...
- 优化内存_内存泄漏——C
内存泄漏: 动态申请内存,没有正常释放,后续又申请内存,也没释放内存,导致内存池被全部被占用,最终再申请内存的时候失败:严格点则每次申请内存的时候判断申请到的指针是否为空,若为空NULL则表示申请失 ...
- [2019杭电多校第四场][hdu6621]K-th Closest Distance(主席树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6621 题意为求区间[l,r]内第k小|a[i]-p|的值. 可以二分答案,如果二分的值为x,则判断区间 ...
- dfs(枚举)
http://codeforces.com/gym/100989/problem/L L. Plus or Minus (A) time limit per test 1.0 s memory lim ...