Appearance
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 项目中使用