2、异步请求2.1 异步请求处理实现类@Service@Slf4jpublic class ChargeServiceImpl implements ChargeService{@Override@Async//开启异步线程注解,如果是同一个类中的其他方法 , 添加此异步处理注解,异步是不生效的//使用的是Spring内置的线程池public void executesAsynCharge(String chargeTel, Double chargeMoney) {try {TimeUnit.MILLISECONDS.sleep(2000);}catch (Exception e){e.printStackTrace();}log.info("********* 异步渠道 充值成功,充值手机号:{},充值金额:{} ************",chargeTel,chargeMoney);}}
2.2 主启动类主启动类上必须增加@EnableAsync 注解,开启异步处理功能;
@SpringBootApplication@EnableAsync //开启异步处理功能public class Springboot03AsyztimerApplication {public static void main(String[] args) {SpringApplication.run(Springboot03AsyzyimerApplication.class, args);}}
2.3 请求调用异步处理方法@RestController@Slf4jpublic class ChargeController {@AutowiredChargeService chargeService;@GetMapping("/asyncCharge")publicString asyncCharge(@RequestParam("chargeTel") String chargeTel,@RequestParam("chargeMoney") Double chargeMoney){log.info("------ 开始充值 , 充值手机号:{},充值金额:{} 开始调用充值渠道充值 --------- ",chargeTel,chargeMoney);//log startTimeMillis = System.currentTimeMillis(); //旧的获取当前时间毫秒数long startTimeMillis = Instant.now().toEpochMilli();//调用充值渠道 异步 充值chargeService.executesAsynCharge(chargeTel,chargeMoney);long finishTimeMillis = Instant.now().toEpochMilli();log.info("------ 结束充值,充值手机号:{},充值金额:{} ,充值总耗时:{}-----------",chargeTel,chargeMoney,finishTimeMillis-startTimeMillis);return String.format("%s充值%s成功!",chargeTel,chargeMoney);}}
3、定时任务3.1 场景异步充值结果,定时批量回调订单;
public void chargeResultNotifyMethodOne(){//模拟从数据库获取5笔需要回调的充值订单,进行批量回调结果List<String> chargeOrderList = Arrays.asList("KH001","KH002","KH003","KH004","KH005");//循环处理需要回调的5笔订单log.info("---------- 开始 执行批量回调充值结果------------");chargeOrderList.forEach(chargeOrderNo->{log.info("***** 充值订单:{},回调重接成功! ******");try{TimeUnit.MILLISECONDS.sleep(100);}catch (Exception e){e.printStackTrace();}log.info("---------- 结束 执行批量回调充值结果 ------------");});}
3.2 注解3.2.1 @Scheduled(fixedDelay = 5 * 1000)fixedDelay :计时规则: 从上一次执行结束 开始计时 到 下一次定时任务开始 ,不关心前一次定时任务耗时多久;
3.2.2 @Scheduled(fixedRate = 5 * 1000)fixedRate: 计时规则:从上一次定时任务执行开始 开始计时 到 下一次定时任务开始,如果上一次定时任务 超过定时,上一次执行完后,下一次立即执行;
3.2.3 @Scheduled(cron = "*/5 * * * * ?")cron表达式:既可以是实现循环时间间隔 , 执行定时任务,也可以执行某个时刻的定时任务,通过指定表达式实现的,灵活度是三种最高的1)循环定时: 每次执行的定时任务时间点,是由cron表达是决定的,其实都是预置好的;比如5秒,5秒执行一次定时2)定点定时:在指定的某个时刻,执行一次定时任务
秒 分 时 日 月 周@Scheduled(cron = "*/5 * * * * ?")
3.2.4@EnableScheduling@SpringBootApplication@EnableScheduling //开启定时任务功能public class Springboot03AsyztimerApplication {public static void main(String[] args) {SpringApplication.run(Springboot03AsyzyimerApplication.class, args);}}
推荐阅读
- 重庆三峡移民房屋补偿 三峡移民安置政策
- 三星galaxyzfold3参数配置_三星galaxyzfold3详细参数
- iphone x怎么截屏(苹果x截屏的三种方法)
- 三人麻将怎么玩(三人麻将赢的诀窍)
- Springboot 之 Filter 实现超大响应 JSON 数据压缩
- Java一次返回中国所有省市区三级树形级联+前端vue展示【200ms内】
- SpringBoot+Vue3 AgileBoot - 手把手一步一步带你Run起全栈项目
- SpringBoot 自定义注解 实现多数据源
- 二 SpringBoot - 核心配置文件
- Nebula Graph介绍和SpringBoot环境连接和查询