实现方法
- 定义一个 service 类
- 添加注解@Scheduled
- 强制 service bean 对象提前创建 lazyInit = false
- 添加 @EnableScheduling 注解
完整代码
@Slf4j
@CompileStatic
class HelloWorldJobService {
static lazyInit = false
@Scheduled(fixedDelay = 10000L)
void executeEveryTen() {
log.info "Simple Job every 10 seconds :{}", new SimpleDateFormat("dd/M/yyyy hh:mm:ss").format(new Date())
}
@Scheduled(fixedDelay = 45000L, initialDelay = 5000L)
void executeEveryFourtyFive() {
log.info "Simple Job every 45 seconds :{}", new SimpleDateFormat("dd/M/yyyy hh:mm:ss").format(new Date())
}
}
grails-app/init/demo/Application.groovy
package demo
import grails.boot.GrailsApp
import grails.boot.config.GrailsAutoConfiguration
import groovy.transform.CompileStatic
import org.springframework.context.annotation.ComponentScan
import org.springframework.scheduling.annotation.EnableScheduling
@CompileStatic
@ComponentScan('demo')
@EnableScheduling
class Application extends GrailsAutoConfiguration {
static void main(String[] args) {
GrailsApp.run(Application, args)
}
}
常见问题
一开始在某些项目中“定时服务”并不能正常工作,经过排查,发现原来是因为漏掉了 @EnableScheduling 注解,加上后,问题解决。