|
51 | 51 | import org.springframework.integration.jdbc.lock.JdbcLockRegistry; |
52 | 52 | import org.springframework.stereotype.Service; |
53 | 53 | import org.springframework.transaction.annotation.Transactional; |
| 54 | +import org.springframework.transaction.support.TransactionTemplate; |
54 | 55 | import org.springframework.util.CollectionUtils; |
55 | 56 |
|
56 | 57 | import com.alibaba.fastjson.JSONObject; |
@@ -226,6 +227,8 @@ public class ScheduleService { |
226 | 227 |
|
227 | 228 | @Autowired |
228 | 229 | private ScheduleDescriptionGenerator descriptionGenerator; |
| 230 | + @Autowired |
| 231 | + private TransactionTemplate txTemplate; |
229 | 232 |
|
230 | 233 | private final ScheduleMapper scheduleMapper = ScheduleMapper.INSTANCE; |
231 | 234 |
|
@@ -431,71 +434,77 @@ private void validateTriggerConfig(TriggerConfig triggerConfig) { |
431 | 434 | } |
432 | 435 | } |
433 | 436 |
|
434 | | - @Transactional(rollbackFor = Exception.class) |
435 | 437 | public void executeChangeSchedule(ScheduleChangeParams req) { |
436 | | - try { |
| 438 | + // start change quartzJob |
| 439 | + boolean isSuccess = Boolean.TRUE.equals(txTemplate.execute(status -> { |
437 | 440 | Schedule targetSchedule = nullSafeGetModelById(req.getScheduleId()); |
438 | | - // start to change schedule |
439 | | - switch (req.getOperationType()) { |
440 | | - case CREATE: |
441 | | - case RESUME: { |
442 | | - scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.ENABLED); |
443 | | - break; |
444 | | - } |
445 | | - case UPDATE: { |
446 | | - ScheduleEntity entity = nullSafeGetById(req.getScheduleId()); |
447 | | - entity.setJobParametersJson(JsonUtils.toJson(req.getUpdateScheduleReq().getParameters())); |
448 | | - entity.setTriggerConfigJson(JsonUtils.toJson(req.getUpdateScheduleReq().getTriggerConfig())); |
449 | | - entity.setDescription(req.getUpdateScheduleReq().getDescription()); |
450 | | - entity.setStatus(ScheduleStatus.ENABLED); |
451 | | - PreConditions.notNull(req.getUpdateScheduleReq(), "req.updateScheduleReq"); |
452 | | - if (req.getUpdateScheduleReq().getParameters() instanceof DataArchiveParameters) { |
453 | | - DataArchiveParameters parameters = (DataArchiveParameters) req.getUpdateScheduleReq() |
454 | | - .getParameters(); |
455 | | - parameters.getRateLimit().setOrderId(req.getScheduleId()); |
456 | | - dlmLimiterService.updateByOrderId(req.getScheduleId(), parameters.getRateLimit()); |
| 441 | + try { |
| 442 | + // start to change schedule |
| 443 | + switch (req.getOperationType()) { |
| 444 | + case CREATE: |
| 445 | + case RESUME: { |
| 446 | + scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.ENABLED); |
| 447 | + break; |
457 | 448 | } |
458 | | - if (req.getUpdateScheduleReq().getParameters() instanceof DataDeleteParameters) { |
459 | | - DataDeleteParameters parameters = (DataDeleteParameters) req.getUpdateScheduleReq() |
460 | | - .getParameters(); |
461 | | - parameters.getRateLimit().setOrderId(req.getScheduleId()); |
462 | | - dlmLimiterService.updateByOrderId(req.getScheduleId(), parameters.getRateLimit()); |
| 449 | + case UPDATE: { |
| 450 | + ScheduleEntity entity = nullSafeGetById(req.getScheduleId()); |
| 451 | + entity.setJobParametersJson(JsonUtils.toJson(req.getUpdateScheduleReq().getParameters())); |
| 452 | + entity.setTriggerConfigJson(JsonUtils.toJson(req.getUpdateScheduleReq().getTriggerConfig())); |
| 453 | + entity.setDescription(req.getUpdateScheduleReq().getDescription()); |
| 454 | + entity.setStatus(ScheduleStatus.ENABLED); |
| 455 | + PreConditions.notNull(req.getUpdateScheduleReq(), "req.updateScheduleReq"); |
| 456 | + if (req.getUpdateScheduleReq().getParameters() instanceof DataArchiveParameters) { |
| 457 | + DataArchiveParameters parameters = (DataArchiveParameters) req.getUpdateScheduleReq() |
| 458 | + .getParameters(); |
| 459 | + parameters.getRateLimit().setOrderId(req.getScheduleId()); |
| 460 | + dlmLimiterService.updateByOrderId(req.getScheduleId(), parameters.getRateLimit()); |
| 461 | + } |
| 462 | + if (req.getUpdateScheduleReq().getParameters() instanceof DataDeleteParameters) { |
| 463 | + DataDeleteParameters parameters = (DataDeleteParameters) req.getUpdateScheduleReq() |
| 464 | + .getParameters(); |
| 465 | + parameters.getRateLimit().setOrderId(req.getScheduleId()); |
| 466 | + dlmLimiterService.updateByOrderId(req.getScheduleId(), parameters.getRateLimit()); |
| 467 | + } |
| 468 | + targetSchedule = scheduleMapper.entityToModel(scheduleRepository.save(entity)); |
| 469 | + break; |
463 | 470 | } |
464 | | - targetSchedule = scheduleMapper.entityToModel(scheduleRepository.save(entity)); |
465 | | - break; |
466 | | - } |
467 | | - case PAUSE: { |
468 | | - scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.PAUSE); |
469 | | - break; |
470 | | - } |
471 | | - case TERMINATE: { |
472 | | - scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.TERMINATED); |
473 | | - break; |
474 | | - } |
475 | | - case DELETE: { |
476 | | - scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.DELETED); |
477 | | - break; |
| 471 | + case PAUSE: { |
| 472 | + scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.PAUSE); |
| 473 | + break; |
| 474 | + } |
| 475 | + case TERMINATE: { |
| 476 | + scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.TERMINATED); |
| 477 | + break; |
| 478 | + } |
| 479 | + case DELETE: { |
| 480 | + scheduleRepository.updateStatusById(targetSchedule.getId(), ScheduleStatus.DELETED); |
| 481 | + break; |
| 482 | + } |
| 483 | + default: |
| 484 | + throw new UnsupportedException(); |
478 | 485 | } |
479 | | - default: |
480 | | - throw new UnsupportedException(); |
| 486 | + |
| 487 | + // start change quartzJob |
| 488 | + ChangeQuartJobParam quartzJobReq = new ChangeQuartJobParam(); |
| 489 | + quartzJobReq.setOperationType(req.getOperationType()); |
| 490 | + quartzJobReq.setJobName(targetSchedule.getId().toString()); |
| 491 | + quartzJobReq.setJobGroup(targetSchedule.getType().name()); |
| 492 | + quartzJobReq.setTriggerConfig(targetSchedule.getTriggerConfig()); |
| 493 | + quartzJobService.changeQuartzJob(quartzJobReq); |
| 494 | + return true; |
| 495 | + } catch (Exception e) { |
| 496 | + log.warn("Change schedule failed,scheduleId={},operationType={},changelogId={}", targetSchedule.getId(), |
| 497 | + req.getOperationType(), req.getScheduleChangeLogId(), e); |
| 498 | + status.setRollbackOnly(); |
| 499 | + return false; |
481 | 500 | } |
| 501 | + })); |
482 | 502 |
|
483 | | - // start change quartzJob |
484 | | - ChangeQuartJobParam quartzJobReq = new ChangeQuartJobParam(); |
485 | | - quartzJobReq.setOperationType(req.getOperationType()); |
486 | | - quartzJobReq.setJobName(targetSchedule.getId().toString()); |
487 | | - quartzJobReq.setJobGroup(targetSchedule.getType().name()); |
488 | | - quartzJobReq.setTriggerConfig(targetSchedule.getTriggerConfig()); |
489 | | - quartzJobService.changeQuartzJob(quartzJobReq); |
490 | | - scheduleChangeLogService.updateStatusById(req.getScheduleChangeLogId(), ScheduleChangeStatus.SUCCESS); |
491 | | - log.info("Change schedule success,scheduleId={},operationType={},changelogId={}", targetSchedule.getId(), |
492 | | - req.getOperationType(), req.getScheduleChangeLogId()); |
493 | | - } catch (Exception e) { |
494 | | - log.warn("Change schedule failed,scheduleId={},operationType={},changelogId={}", req.getScheduleId(), |
495 | | - req.getOperationType(), req.getScheduleChangeLogId(), e); |
496 | | - scheduleChangeLogService.updateStatusById(req.getScheduleChangeLogId(), ScheduleChangeStatus.FAILED); |
497 | | - throw e; |
498 | | - } |
| 503 | + scheduleChangeLogService.updateStatusById(req.getScheduleChangeLogId(), |
| 504 | + isSuccess ? ScheduleChangeStatus.SUCCESS : ScheduleChangeStatus.FAILED); |
| 505 | + log.info("Change schedule completed,scheduleId={},operationType={},changelogId={},status={}", |
| 506 | + req.getScheduleId(), |
| 507 | + req.getOperationType(), req.getScheduleChangeLogId(), isSuccess ? "SUCCESS" : "FAILED"); |
499 | 508 |
|
500 | 509 | } |
501 | 510 |
|
|
0 commit comments