Skip to content

createJobQuery

Flowable 7.1.0 摘要:创建作业查询对象,用于查询异步作业、定时作业等。

方法签名与说明

JobQuery createJobQuery()

创建作业查询构建器,用于查询系统中的异步作业、定时器作业等。

Returns:

  • JobQuery - 作业查询构建器

常见使用场景

1. 作业监控

监控系统中待执行的异步作业数量和状态。

2. 失败作业处理

查询执行失败的作业,进行重试或错误处理。

3. 定时任务管理

查看和管理流程中的定时任务。

Kotlin + Spring Boot 调用示例

示例1:查询待执行的作业

kotlin
import org.flowable.engine.ManagementService
import org.springframework.stereotype.Service

@Service
class JobMonitorService(
    private val managementService: ManagementService
) {
    
    /**
     * 查询待执行的作业
     * 企业场景:作业监控面板
     */
    fun getPendingJobs(): List<Map<String, Any>> {
        val jobs = managementService.createJobQuery()
            .list()
        
        return jobs.map { job ->
            mapOf(
                "jobId" to job.id,
                "processInstanceId" to job.processInstanceId,
                "retries" to job.retries,
                "duedate" to job.duedate,
                "exceptionMessage" to job.exceptionMessage
            )
        }
    }
}

示例2:查询失败的作业

kotlin
import org.flowable.engine.ManagementService
import org.springframework.stereotype.Service

@Service
class FailedJobService(
    private val managementService: ManagementService
) {
    
    /**
     * 查询失败的作业
     * 企业场景:错误监控和告警
     */
    fun getFailedJobs(): List<Map<String, Any>> {
        val failedJobs = managementService.createJobQuery()
            .withException() // 有异常的作业
            .list()
        
        println("发现 ${failedJobs.size} 个失败的作业")
        
        return failedJobs.map { job ->
            mapOf(
                "jobId" to job.id,
                "processInstanceId" to job.processInstanceId,
                "retries" to job.retries,
                "exceptionMessage" to job.exceptionMessage
            )
        }
    }
}

示例3:按流程实例查询作业

kotlin
import org.flowable.engine.ManagementService
import org.springframework.stereotype.Service

@Service
class ProcessJobService(
    private val managementService: ManagementService
) {
    
    /**
     * 查询流程实例的所有作业
     * 企业场景:流程实例详情页展示异步任务
     */
    fun getJobsByProcessInstance(processInstanceId: String): List<Map<String, Any>> {
        val jobs = managementService.createJobQuery()
            .processInstanceId(processInstanceId)
            .list()
        
        return jobs.map { job ->
            mapOf(
                "jobId" to job.id,
                "jobType" to job.jobType,
                "retries" to job.retries,
                "duedate" to job.duedate
            )
        }
    }
}

示例4:作业管理REST API

kotlin
import org.flowable.engine.ManagementService
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/api/jobs")
class JobQueryController(
    private val managementService: ManagementService
) {
    
    @GetMapping
    fun listJobs(
        @RequestParam(required = false) processInstanceId: String?,
        @RequestParam(required = false) withException: Boolean?,
        @RequestParam(defaultValue = "1") page: Int,
        @RequestParam(defaultValue = "10") size: Int
    ): Map<String, Any> {
        
        val query = managementService.createJobQuery()
        
        processInstanceId?.let { query.processInstanceId(it) }
        if (withException == true) {
            query.withException()
        }
        
        val total = query.count()
        val jobs = query.listPage((page - 1) * size, size)
        
        return mapOf(
            "data" to jobs.map { mapOf(
                "id" to it.id,
                "processInstanceId" to it.processInstanceId,
                "retries" to it.retries
            )},
            "total" to total
        )
    }
}

注意事项

1. 作业类型

  • 普通异步作业
  • 定时器作业(使用createTimerJobQuery)
  • 死信作业(使用createDeadLetterJobQuery)

2. 性能优化

  • 添加查询条件,避免全表扫描
  • 使用分页查询

相关 API

  • ManagementService.createJobQuery() - 查询作业
  • ManagementService.createTimerJobQuery() - 查询定时作业
  • ManagementService.createDeadLetterJobQuery() - 查询死信作业
  • ManagementService.executeJob() - 执行作业

本文档说明

  • 基于 Flowable 7.1.0 版本编写
  • 所有示例均可直接在 Spring Boot + Kotlin 项目中使用