Spring Boot与Kotlin定时任务的示例(Scheduling Tasks)
在编写SpringBoot应用中会遇到这样的场景,比如:需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。
创建定时任务
在SpringBoot中编写定时任务是非常简单的事,下面通过实例介绍如何在SpringBoot中创建定时任务,实现每过5秒输出一下当前时间。
在SpringBoot的主类中加入@EnableScheduling注解,启用定时任务的配置
importorg.springframework.boot.SpringApplication importorg.springframework.boot.autoconfigure.SpringBootApplication importorg.springframework.scheduling.annotation.EnableScheduling /** *Createdbyhttp://quanke.nameon2018/1/12. */ @SpringBootApplication @EnableScheduling classApplication funmain(args:Array){ SpringApplication.run(Application::class.java,*args) }
创建定时任务实现类
importorg.apache.commons.logging.LogFactory importorg.springframework.scheduling.annotation.Scheduled importorg.springframework.stereotype.Component importjava.text.SimpleDateFormat importjava.util.* /** *Createdbyhttp://quanke.nameon2018/1/12. */ @Component classScheduledTasks{ vallog=LogFactory.getLog(ScheduledTasks::class.java)!! privatevaldateFormat=SimpleDateFormat(“HH:mm:ss”) @Scheduled(fixedRate=1000) funreportCurrentTime(){ log.info(“现在时间,${dateFormat.format(Date())}”) } }
运行程序,控制台中可以看到类似如下输出,定时任务开始正常运作了。
2018-01-2123:09:01.112INFO23832—[main]n.q.kotlin.chaper11_8_1.ApplicationKt:StartedApplicationKtin8.024seconds(JVMrunningfor8.724)
2018-01-2123:09:02.112INFO23832—[pool-2-thread-1]n.q.k.chaper11_8_1.task.ScheduledTasks:现在时间,23:09:02
2018-01-2123:09:03.042INFO23832—[pool-2-thread-1]n.q.k.chaper11_8_1.task.ScheduledTasks:现在时间,23:09:03
2018-01-2123:09:04.042INFO23832—[pool-2-thread-1]n.q.k.chaper11_8_1.task.ScheduledTasks:现在时间,23:09:04
2018-01-2123:09:05.042INFO23832—[pool-2-thread-1]n.q.k.chaper11_8_1.task.ScheduledTasks:现在时间,23:09:05
@Scheduled详解
在上面的入门例子中,使用了@Scheduled(fixedRate=1000)注解来定义每过1秒执行的任务,对于@Scheduled的使用可以总结如下几种方式:
- @Scheduled(fixedRate=1000):上一次开始执行时间点之后1秒再执行
- @Scheduled(fixedDelay=1000):上一次执行完毕时间点之后1秒再执行
- @Scheduled(initialDelay=1000,fixedRate=5000):第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
- @Scheduled(cron=”/1“):通过cron表达式定义规则
@Scheduled注解是单线程的,如果需要多线程,请增加@Async
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。