java的后台任务调度@Schedule和@Async
- 格式:docx
- 大小:17.43 KB
- 文档页数:3
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
java 的后台任务调度@Schedule 和@Async
2015/08/18 2322 调度任务;@Schedule 异步任务;@Async 当然,使用这
两个是有条件的,需要在spring 应用的上下文中声明task:annotation-driven/ 当然,如果我们是基于java 配置的,需要在配置哪里加多EnableScheduling
@EnableSchedulingpublic class WebAppConfig { ....先看下@Schedule 怎么调
用再说
public final static long ONE_DAY = 24 * 60 * 60 * 1000; public final static long ONE_HOUR = 60 * 60 * 1000; @Scheduled(fixedRate = ONE_DAY) public void scheduledTask() { System.out.println(“我是一个每隔一天就会执行一次的调度任务”);
@Scheduled(fixedDelay = ONE_HOURS) public void scheduleTask2() { System.out.println(“我是一个执行完后,隔一小时就会执行的任务”);
@Scheduled(cron = “0 0/1 * * * ? “) public void ScheduledTask3() { System.out.println(“我是一个每隔一分钟就就会执行的任务”); } 需要注意的
关于最后一个,在指定时间执行的任务,里面使用的是Cron 表达式,同时我们
看到了两个不一样的面孔fixedDelay fixedRate,前者表示在指定间隔,运行程序,
例如这个程序在今晚九点运行程序,跑完这个方法后的一个小时,就会再执行一
次,而后者fixedDelay 者是指,这个函数每隔一段时间就会被调用(我们这里设置
的是一天),不管这个方法是在运行还是结束了。
我们在serviceImpl 类写这些调度任务时候,也需要在这些我们定义的serviceInterface 的借口中写多这个接口,要不然会爆***—— but not found in any interface(s) for bean JDK proxy. Either pull the method up to an interface or @Async 有时候我们会调用一些特殊的任务,任务会比较耗时,重要的是,我
们不管他返回的后果。
这时候我们就需要用这类的异步任务啦,调用后就让他去
跑,不堵塞主线程,我们继续干别的。
@Async public void doSomeHeavyBackgroundTask() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } 这比我们手动开多一个线程方。