增加服务器管理认证方式,增加测试连接接口
This commit is contained in:
parent
10bfa7bcbd
commit
bd7733d7d7
@ -89,6 +89,18 @@ public class ScheduleJobApiController extends BaseController<ScheduleJob, Schedu
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 恢复启用禁用任务
|
||||
*/
|
||||
@Operation(summary = "启用定时任务", description = "恢复被禁用(DISABLED)的定时任务,重新注册调度,状态变为ENABLED")
|
||||
@PostMapping("/{id}/enable")
|
||||
public Response<Void> enableJob(
|
||||
@Parameter(description = "任务ID", required = true) @PathVariable Long id
|
||||
) {
|
||||
scheduleJobService.enableJob(id);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 立即触发任务
|
||||
*/
|
||||
|
||||
@ -81,7 +81,7 @@ public class ScheduleJob extends Entity<Long> {
|
||||
*/
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "status", nullable = false, length = 20)
|
||||
private ScheduleJobStatusEnum status = ScheduleJobStatusEnum.ENABLED;
|
||||
private ScheduleJobStatusEnum status;
|
||||
|
||||
/**
|
||||
* 是否允许并发执行
|
||||
|
||||
@ -41,6 +41,12 @@ public interface IScheduleJobService extends IBaseService<ScheduleJob, ScheduleJ
|
||||
*/
|
||||
void disableJob(Long jobId);
|
||||
|
||||
/**
|
||||
* 恢复启用(解除禁用)任务
|
||||
* @param jobId 任务ID
|
||||
*/
|
||||
void enableJob(Long jobId);
|
||||
|
||||
/**
|
||||
* 立即执行一次任务(仅限ENABLED和PAUSED状态)
|
||||
*
|
||||
|
||||
@ -80,7 +80,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
public ScheduleJobDTO create(ScheduleJobDTO dto) {
|
||||
// 检查任务名称唯一性
|
||||
if (jobRepository.existsByJobNameAndDeletedFalse(dto.getJobName())) {
|
||||
throw new BusinessException(ResponseCode.DATA_ALREADY_EXISTS, new Object[]{"任务名称", dto.getJobName()});
|
||||
throw new BusinessException(ResponseCode.DATA_ALREADY_EXISTS, new Object[] {"任务名称", dto.getJobName()});
|
||||
}
|
||||
return super.create(dto);
|
||||
}
|
||||
@ -95,7 +95,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
// 2. 检查是否试图修改 status(强制拦截)
|
||||
if (dto.getStatus() != null && dto.getStatus() != oldStatus) {
|
||||
throw new BusinessException(ResponseCode.SCHEDULE_JOB_STATUS_CANNOT_UPDATE,
|
||||
new Object[]{"请使用 /start、/pause、/resume、/disable 接口管理任务状态"});
|
||||
new Object[] {"请使用 /start、/pause、/resume、/disable 接口管理任务状态"});
|
||||
}
|
||||
|
||||
// 3. 强制保持原状态(防止前端传入)
|
||||
@ -179,6 +179,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void startJob(Long jobId) {
|
||||
try {
|
||||
ScheduleJob job = findEntityById(jobId);
|
||||
@ -218,6 +219,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void pauseJob(Long jobId) {
|
||||
try {
|
||||
scheduler.pauseJob(getJobKey(jobId));
|
||||
@ -236,6 +238,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void resumeJob(Long jobId) {
|
||||
try {
|
||||
scheduler.resumeJob(getJobKey(jobId));
|
||||
@ -254,6 +257,7 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void disableJob(Long jobId) {
|
||||
ScheduleJob job = findEntityById(jobId);
|
||||
|
||||
@ -283,6 +287,40 @@ public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJob, Schedul
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void enableJob(Long jobId) {
|
||||
ScheduleJob job = findEntityById(jobId);
|
||||
if (job.getStatus() != ScheduleJobStatusEnum.DISABLED) {
|
||||
throw new BusinessException(ResponseCode.SCHEDULE_JOB_STATUS_CANNOT_UPDATE, new Object[] {"仅禁用状态任务可启用"});
|
||||
}
|
||||
try {
|
||||
// 创建并调度新Job
|
||||
JobDetail jobDetail = JobBuilder.newJob(DynamicJob.class)
|
||||
.withIdentity(getJobKey(jobId))
|
||||
.withDescription(job.getJobDescription())
|
||||
.build();
|
||||
jobDetail.getJobDataMap().put("jobId", job.getId());
|
||||
jobDetail.getJobDataMap().put("jobName", job.getJobName());
|
||||
jobDetail.getJobDataMap().put("beanName", job.getBeanName());
|
||||
jobDetail.getJobDataMap().put("methodName", job.getMethodName());
|
||||
jobDetail.getJobDataMap().put("methodParams", job.getMethodParams());
|
||||
|
||||
Trigger trigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(getTriggerKey(jobId))
|
||||
.withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression()))
|
||||
.build();
|
||||
|
||||
scheduler.scheduleJob(jobDetail, trigger);
|
||||
job.setStatus(ScheduleJobStatusEnum.ENABLED);
|
||||
jobRepository.save(job);
|
||||
log.info("任务从DISABLED恢复启用成功:jobId={}, jobName={}", jobId, job.getJobName());
|
||||
} catch (SchedulerException e) {
|
||||
log.error("恢复启用任务失败:jobId={}, jobName={}", jobId, job.getJobName(), e);
|
||||
throw new BusinessException(ResponseCode.SCHEDULE_JOB_START_FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void triggerJob(Long jobId) {
|
||||
// 检查任务状态
|
||||
|
||||
Loading…
Reference in New Issue
Block a user