什么是定时任务,使用场景
常见定时任务
SpringBoot使用注解方式开启定时任务
package work.flyrun.demoproject1.schedule;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @Program: demo-project1
* @Description: 定时统计订单,金额
* @Author: chen
* @Dates: 2020-11-09-20-06
* @Version:
**/
@Component
public class VideoOrderTask {
// @Scheduled(fixedRate = 2000)//任务不管是否结束都执行
// @Scheduled(fixedDelay = 2000)//任务结束之后执行
@Scheduled(cron="*/1 * * * * *")//个性化定时
public void sum(){
// System.out.println(LocalDateTime.now() +"当前交易额="+Math.random());
}
}
package work.flyrun.demoproject1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@ServletComponentScan
@SpringBootApplication
@EnableScheduling
public class DemoProject1Application {
public static void main(String[] args) {
SpringApplication.run(DemoProject1Application.class, args);
}
}
什么是异步任务和使用场景:适用于处理log、发送邮件、短信……等(减少用户的等待时间 相当于线程)
启动类里面使用@EnableAsync注解开启功能,自动扫描
定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async
定义异步任务类需要获取结果
注意点:
@Autowired
private AsyncTask asyncTask;
@GetMapping("async")
public JsonData testAsync(){
long begin = System.currentTimeMillis();
// asyncTask.task1();
// asyncTask.task2();
Future<String> task4 = asyncTask.task4();
Future<String> task5 = asyncTask.task5();
for (;;){
if (task4.isDone() && task5.isDone()){
try {
String task4Result=task4.get();//自行定义一个线程睡眠模拟效果
System.out.println(task4Result);
String task5Result=task5.get();
System.out.println(task5Result);
}catch (ExecutionException e){//试图获取已通过抛出异常而中止的任务的结果时
e.printStackTrace();
}catch (InterruptedException e){//当在sleep中的线程被调用interrupt方法时,就会放弃暂停的状态
e.printStackTrace();
}
finally {
break;
}
}
}
long end = System.currentTimeMillis();
return JsonData.buildSuccess(end-begin);
}
下一章介绍在线视频中所用到的数据库结构