平时我们工作时会经常遇到有关定时器的业务需求,比如定时去更新商品的销量这些,那其实我们可以根据业务的实际需求去定制开发定时器,这里主要讲解和spring有关的定时器,下面直接上代码
<!--maven需要引入的依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
springboot已经整合了有关定时器的依赖,直接引入即可操作,很方便
首先我们需要了解一下cron表达式,这里展示的cron表达式是每秒钟更新一次,这个具体怎么写需要根据业务的实际需求,当然没必要死记硬背,这里贴出一个网站,直接去那里动态生成即可 http://cron.qqe2.com/
1.我们需要一个Config对象,属于java配置方式,这里写的比较简单,放置于Application同级目录,如果放置其他地方,那需要设置一个@ComponentScan注解,表明我们需要在哪里扫描具体的Task任务
@Configuration
@EnableScheduling
public class TaskConfiguration {
}
2.定时任务具体的业务逻辑
@Component
public class UpdateSaleNumTask {
private final Logger logger = LoggerFactory.getLogger(UpdateSaleNumTask.class);
@Scheduled(cron = "* * * * * ?")
public void updateSaleNum() {
logger.info("============>开始执行更新销量");
//这里定义一个时间,方便观察cron表达式对计划任务的作用
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
logger.info("执行销量更新:时间{}", format.format(new Date()));
logger.info("============>销量更新完毕");
}
}
结果:
c.m.schedule.task.UpdateSaleNumTask : ============>开始执行更新销量
c.m.schedule.task.UpdateSaleNumTask : 执行销量更新:时间2018-11-25 15:35:54
c.m.schedule.task.UpdateSaleNumTask : ============>销量更新完毕
c.m.schedule.task.UpdateSaleNumTask : ============>开始执行更新销量
c.m.schedule.task.UpdateSaleNumTask : 执行销量更新:时间2018-11-25 15:35:55
c.m.schedule.task.UpdateSaleNumTask : ============>销量更新完毕
c.m.schedule.task.UpdateSaleNumTask : ============>开始执行更新销量
c.m.schedule.task.UpdateSaleNumTask : 执行销量更新:时间2018-11-25 15:35:56
c.m.schedule.task.UpdateSaleNumTask : ============>销量更新完毕
上面的基本上就是一个简单的案例,后面我们会跟进更为复杂的定时方案