Skip to content

setJobRetries

Flowable 7.1.0 摘要:设置作业的重试次数。

方法签名与说明

void setJobRetries(String jobId, int retries)

设置指定作业的重试次数。常用于恢复失败的作业。

Parameters:

  • jobId - 作业ID
  • retries - 重试次数

Throws:

  • FlowableObjectNotFoundException - 当作业不存在时

常见使用场景

1. 恢复失败作业

作业失败后重试次数为0,通过设置重试次数使其可以再次执行。

2. 批量恢复

批量设置多个失败作业的重试次数。

3. 调整重试策略

根据业务需要动态调整作业的重试次数。

Kotlin + Spring Boot 调用示例

示例1:恢复失败作业的重试次数

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

@Service
class JobRetryService(
    private val managementService: ManagementService
) {
    
    /**
     * 恢复作业重试次数
     * 企业场景:作业失败后,修复问题并恢复重试
     */
    fun resetJobRetries(jobId: String) {
        println("恢复作业重试次数: $jobId")
        
        // 设置3次重试机会
        managementService.setJobRetries(jobId, 3)
        
        println("重试次数已恢复为3次")
    }
}

示例2:批量恢复失败作业

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

@Service
class BatchJobRecoveryService(
    private val managementService: ManagementService
) {
    
    /**
     * 批量恢复失败作业
     * 企业场景:系统恢复后,批量设置重试次数
     */
    fun batchResetRetries(retries: Int = 3): Int {
        // 查询所有重试次数为0的作业
        val jobs = managementService.createJobQuery()
            .noRetriesLeft()
            .list()
        
        println("发现 ${jobs.size} 个需要恢复的作业")
        
        jobs.forEach { job ->
            try {
                managementService.setJobRetries(job.id, retries)
            } catch (e: Exception) {
                println("恢复失败: ${job.id}, ${e.message}")
            }
        }
        
        return jobs.size
    }
}

示例3:智能重试策略

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

@Service
class SmartRetryService(
    private val managementService: ManagementService
) {
    
    /**
     * 根据作业类型设置不同的重试次数
     * 企业场景:重要作业多次重试,普通作业少量重试
     */
    fun setSmartRetries(jobId: String, jobType: String) {
        val retries = when (jobType) {
            "CRITICAL" -> 5  // 关键作业:5次重试
            "IMPORTANT" -> 3 // 重要作业:3次重试
            "NORMAL" -> 1    // 普通作业:1次重试
            else -> 1
        }
        
        managementService.setJobRetries(jobId, retries)
        println("作业 $jobId 设置重试次数: $retries")
    }
}

示例4:REST API

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

@RestController
@RequestMapping("/api/jobs")
class JobRetryController(
    private val managementService: ManagementService
) {
    
    /**
     * 设置作业重试次数
     */
    @PostMapping("/{jobId}/retries")
    fun setRetries(
        @PathVariable jobId: String,
        @RequestParam(defaultValue = "3") retries: Int
    ): Map<String, Any> {
        
        return try {
            managementService.setJobRetries(jobId, retries)
            mapOf(
                "success" to true,
                "message" to "重试次数已设置为 $retries",
                "jobId" to jobId
            )
        } catch (e: Exception) {
            mapOf(
                "success" to false,
                "message" to "设置失败: ${e.message}"
            )
        }
    }
}

注意事项

1. 重试次数

  • 设置重试次数后,作业会在下次调度时重新执行
  • 建议不要设置过大的重试次数,避免无限重试

2. 配合使用

  • 通常与 executeJob() 配合使用
  • 先设置重试次数,再手动执行

3. 死信作业

  • 对于死信作业,需先移回可执行队列

相关 API

  • ManagementService.setJobRetries() - 设置重试次数
  • ManagementService.executeJob() - 执行作业
  • ManagementService.moveDeadLetterJobToExecutableJob() - 恢复死信作业
  • ManagementService.createJobQuery() - 查询作业

本文档说明

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