一、Springboot异步任务
在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务。而在
Spring 3+
之后,就已经内置了
@Async
注解来完美解决这个问题,从而提高效率
使用的注解:
- @EnableAsync:启动类上开启基于注解的异步任务
- @Async:标识的方法会异步执行
开启异步任务:
1.启动类添加@EnableAsync
@EnableAsync //开启基于注解的异步处理
@SpringBootApplication
public class SpringBootTaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootTaskApplication.class, args);
}
}
2.批量处理方法添加@Async
@Service
public class AsyncService {
//模拟批量处理操作
@Async
public void batch(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("批量处理完成.........");
}
}
3.Controller测试
@Controller
public class AsyncController {
@Autowired
private AsyncService asyncService;
@ResponseBody
@RequestMapping("/test")
public String test(){
asyncService.batch();
return "success!";
}
}
二、Springboot定时任务调
使用注解:
- @EnableScheduling:启动类上开启基于注解的定时任务
- @Scheduled:标识的方法会进行定时处理
开启定时任务:
1.在启动类添加@EnableScheduling
@EnableScheduling //开启基于注解的的定时任务
@SpringBootApplication
public class SpringBootTaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootTaskApplication.class, args);
}
}
2.在方法上添加@Scheduled
@Service
public class ScheduledService {
private static int count = 0;
//每分钟的1~10秒都调用一次
@Scheduled(cron = "1-10 * * * * *")
public void scheduled(){
System.out.println("调用了scheduled() "+ ++count + " 次");
}
}
3.运行测试
corn表达式:
位置
|
取值范围
|
特殊字符
|
---|---|---|
秒
|
0-59
|
, - * /
|
分
|
0-59
|
, - * /
|
小时
|
0-23
|
, - * /
|
日期
|
1-31
|
, - * ? / L W C
|
月份
|
1-12
|
, - * /
|
星期
|
0-7
或
SUN-SAT 0
和
7
都是周日,
1-6
是周一到周六
|
, - * ? / L C #
|
特殊字符 | 代表含义 |
---|---|
, |
枚举,一个位置上指定多个值,以逗号
,
分隔
|
- | 区间 |
* |
任意
|
/ |
步长,每隔多久执行一次
|
? |
日
/
星期冲突匹配
,
指定哪个值
,
另外个就是
?
,比如:
* * * ? * 1
每周
1
执行,则日用
?
不能用
*
,不
是每一天都是周一;
* * * * 2 * ?
每月
2
号
,
则星期不能用
*
|
L |
最后
|
W |
工作日
|
C | 和calendar联系后计算过的值 |
# |
这个月的第几个星期几,
4#2
,第
2
个星期四
|
1-5 * * * * 1到5秒,每秒都触发任务
*/5 * * * * 每隔5秒执行一次
0 */1 * * * 每隔1分钟执行一次
0 0 5-15 * * 每天5-15点整点触发
0 0-5 14 * * 在每天下午2点到下午2:05期间的每1分钟触发
0 0/5 14 * * 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * 朝九晚五工作时间内每半小时
0 0 12 ? * WED 表示每个星期三中午12点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 LW * ? 每个月最后一个工作日的10点15分0秒触发任务
0 15 10 ? * 5#3 每个月第三周的星期五的10点15分0秒触发任务
在线生成cron表达式:http://cron.qqe2.com/