You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Micronaut控制器中注入JobScheduler?

问题:Micronaut控制器中无法注入JobScheduler

错误信息

Internal Server Error: Failed to inject value for parameter [jobScheduler] of class: com.myapp.http.controllers.MyController

Message: No bean of type [org.jobrunr.scheduling.JobScheduler] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
Path Taken: new ReturnController(JobScheduler jobScheduler) --> new ReturnController([JobScheduler jobScheduler])

已完成的配置

  • 依赖:已添加micronaut-inject-java、org.jobrunr:jobrunr-micronaut-feature:5.2.0
  • 控制器代码:
@Controller("/return")
class MyController(private val jobScheduler: JobScheduler) {

    @Post
    fun create() = jobScheduler.schedule(Instant.now()) { println("scheduled...") }
}
  • 数据源配置(application.yml):
datasources:
  default:
    url: jdbc:postgresql://localhost:5432/postgres
    driverClassName: org.postgresql.Driver
    username: postgres
    password: postgres
    dialect: POSTGRES

解决方案

1. 显式启用JobRunr特性

Micronaut 3及以上版本需要显式启用第三方特性,在application.yml中添加:

micronaut:
  features:
    jobrunr: true

2. 修正Kotlin项目的注解处理器配置

对于Kotlin项目,需确保micronaut-inject-java同时作为annotationProcessor和kapt依赖配置。以Gradle为例,在build.gradle.kts中调整:

dependencies {
    annotationProcessor("io.micronaut:micronaut-inject-java")
    kapt("io.micronaut:micronaut-inject-java")
    implementation("org.jobrunr:jobrunr-micronaut-feature:5.2.0")
    runtimeOnly("org.postgresql:postgresql") // 确保数据库驱动存在
}

3. 手动注册JobScheduler Bean(自动配置失效时)

如果自动配置未生效,可通过配置类手动创建并注册JobScheduler:

import io.micronaut.context.annotation.Factory
import org.jobrunr.configuration.JobRunr
import org.jobrunr.scheduling.JobScheduler
import javax.sql.DataSource
import jakarta.inject.Singleton

@Factory
class JobRunrConfig {

    @Singleton
    fun jobScheduler(dataSource: DataSource): JobScheduler {
        return JobRunr.configure()
            .useJobRunrDashboard() // 可选,启用控制台
            .useDataSource(dataSource)
            .initialize()
            .jobScheduler
    }
}

4. 检查版本兼容性

确保JobRunr Micronaut特性版本与你的Micronaut版本匹配:

  • JobRunr 5.x 适配 Micronaut 3.x/4.x
  • 若使用Micronaut 2.x,需降级JobRunr至4.x版本

5. 启用日志排查Bean加载问题

添加日志配置查看Bean加载的详细过程,确认是否有条件注解阻止了JobScheduler的创建:

logger:
  levels:
    io.micronaut.context.condition: TRACE
    org.jobrunr: DEBUG

内容的提问来源于stack exchange,提问作者Rafa Acioly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:30:46