如何解决Micronaut @Scheduled 作业未运行
我正在使用 groovy 和 gradle 处理现有的 micronaut 应用程序,它有一个调度程序,预计每 1 分钟运行一次。不知何故调度程序根本不运行,应用程序也不抛出任何错误(只是保持沉默)。我看不出有什么理由不应该这样做,但我是 micronaut 的新手,我可能会遗漏一些东西。感谢任何指针,从很长一段时间以来一直坚持这个问题。 这是调度程序类。
@CompileStatic
@Singleton
@Requires(notEnv = "test")
class CsmTestJob {
private final CsmTestJobExecutor csmTestJobExecutor
CsmTestJob(CsmTestJobExecutor csmTestJobExecutor) {
this.csmTestJobExecutor = csmTestJobExecutor
}
@Scheduled(fixedDelay = '${feature.job.execute}')
void executeCsmTests() {
csmTestJobExecutor.executeCsmTests()
}
}
这是application.yml
文件
micronaut:
application:
name: csm
server:
port: 8080
host: 127.0.0.1
feature:
job:
execute: "1m"
解决方法
有关于删除静态编译和删除动态调度值的评论,但我认为这两者都不相关。问题中显示的代码不足,无法确定,但我怀疑您的代码可能使用了错误的 @Singleton
注释。
查看位于 https://github.com/jeffbrown/nilambersinghscheduledjob 的项目。
micronaut:
application:
name: nilambersinghscheduledjob
feature:
job:
execute: "1m"
package com.example
import groovy.transform.CompileStatic
import io.micronaut.context.annotation.Requires
import io.micronaut.scheduling.annotation.Scheduled
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import javax.inject.Singleton
@CompileStatic
@Singleton
@Requires(notEnv = "test")
class CsmTestJob {
private static final Logger log = LoggerFactory.getLogger(CsmTestJob)
@Scheduled(fixedDelay = '${feature.job.execute}')
void executeCsmTests() {
log.debug "CSM Test Job Is Running"
}
}
一切正常。
,不久前我遇到了类似的问题,结果发现我在课堂上的其他注释以某种方式干扰并阻止了调度程序运行。
我会尝试删除 CompileStatic 并将计划硬编码为直接字符串文字。
还要确保您正在导入 javax.inject.Singleton
,否则您对 Singleton
的引用将选择 groovy 默认 groovy.lang.Singleton
,这会破坏 micronaut 机制。
最后要尝试的是打开调试日志记录并阅读 micronaut 打印的大量信息。就我而言,我可以从调试日志中看到 bean 初始化存在问题。
我意识到这不是一个直接的解决方案,但我认为给出一些潜在的指示总比什么都不提供要好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。