Springboot异步任务和定时任务

一、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
工作日
Ccalendar联系后计算过的值
#
这个月的第几个星期几, 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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值