三种常用的Scheduled方法的表达式:cron,fixedDelay,fixedRate
注:使用此方法的类需要配置@Configuration,@EnableScheduling注解当然也可以开启其他注解,
使用@Scheduled标志的类其返回类型为void;
定时器执行任务
1.cron
//每隔20分钟执行一次此方法
@Scheduled(cron = “0 /20 ?”)
public void cornMethod(){
//log.info(“—-“)
}
2.fixedDelay
//每隔20分钟执行一次此方法,且在项目启动的时候会立马执行一次
@Scheduled(fixedDelay = 20 60 1000)
public void fixedDelayMethod(){
//log.info(“—-“)
}
3.fixedRate
//每隔20分钟执行一次此方法,且在项目启动的时候会立马执行一次,在每次调用的连续开始时间之间测量
public void fixedRateMethod(){
//log.info(“—-“)
}
异步执行任务
为什么要使用异步执行任务:当处理一个业务时业务符合某些条件时需要执行其他的步骤,但是这个步骤并不影响业务正常流程,这个时候就可以使用异步。
使用异步任务执行和使用上面的同步是同一个道理,同样需要配置相关的注解。
我们可以先配置一个异步线程池如下:
1 |
|
- coreSize:核心线程大小
- maxSize:最大线程数
- queueSize: 队列大小(容量)
- keepAlive:线程存活时间
queue-capacity
还提供了一个值。还应根据执行者的队列容量来考虑线程池的配置。有关池大小和队列容量之间关系的完整说明,请参阅文档ThreadPoolExecutor
。主要思想是,在提交任务时,如果活动线程数当前小于核心大小,则执行程序首先尝试使用空闲线程。如果已达到核心大小,则只要尚未达到其容量,就将任务添加到队列中。只有这样,如果达到队列的容量,执行程序才创建超出核心大小的新线程。如果还达到了最大大小,那么执行者将拒绝该任务。keep-alive
设置确定线程在终止之前可以保持空闲状态的时间限制(以秒为单位)。如果当前池中的线程数超过核心数,则在等待此时间而不处理任务后,多余的线程将被终止。时间值为零会导致多余的线程在执行任务后立即终止,而不会在任务队列中保留后续工作
一个的异步代码:
您可以@Async
在方法上提供注释,以使该方法的调用异步发生。换句话说,调用方在调用后立即返回,而方法的实际执行发生在已提交给Spring的任务中TaskExecutor
。在最简单的情况下
1 |
|