package com.vip.saturn.job.basic; import com.vip.saturn.job.trigger.CrondTrigger; import com.vip.saturn.job.trigger.SaturnTrigger; public abstract class CrondJob extends AbstractSaturnJob{ @Override public SaturnTrigger getTrigger() { return new CrondTrigger(); } @Override public boolean isFailoverSupported() { return true; } @Override public void enableJob() { boolean shouldReschedule = false; String timeZoneFromZk = configService.getTimeZoneStr(); String timeZone = jobScheduler.getPreviousConf().getTimeZone(); if(timeZoneFromZk != null && !timeZoneFromZk.equals(timeZone) || timeZoneFromZk == null && timeZone != null) { shouldReschedule = true; jobScheduler.getPreviousConf().setTimeZone(timeZoneFromZk); } String cronFromZk = configService.getCron(); String cron = jobScheduler.getPreviousConf().getCron(); if(cronFromZk != null && !cronFromZk.equals(cron) || cronFromZk == null && cron != null) { shouldReschedule = true; jobScheduler.getPreviousConf().setCron(cronFromZk); } if(shouldReschedule) { jobScheduler.rescheduleJob(cronFromZk); } // if PausePeriodDatePath or pausePeriodTime changed. String prePauseDate = jobScheduler.getPreviousConf().getPausePeriodDate(); String prePauseTime = jobScheduler.getPreviousConf().getPausePeriodTime(); String pauseDate = configService.getJobConfiguration().getPausePeriodDate(); String pauseTime = configService.getJobConfiguration().getPausePeriodTime(); boolean updatePauseConditionFirst = (prePauseDate != null && !prePauseDate.equals(pauseDate)); boolean updatePauseConditionSecond = (prePauseDate == null && pauseDate != null); boolean updatePauseConditionThird = (prePauseTime != null && !prePauseTime.equals(pauseTime)); boolean updatePauseConditionFourth = (prePauseTime == null && pauseTime != null); if (shouldReschedule || updatePauseConditionFirst || updatePauseConditionSecond || updatePauseConditionThird || updatePauseConditionFourth) { executionService.updateNextFireTime(executionContextService.getShardingItems()); } if(updatePauseConditionFirst || updatePauseConditionSecond) { jobScheduler.getPreviousConf().setPausePeriodDate(pauseDate); } if(updatePauseConditionThird || updatePauseConditionFourth) { jobScheduler.getPreviousConf().setPausePeriodTime(pauseTime); } int countTime = configService.getJobConfiguration().getProcessCountIntervalSeconds(); if(jobScheduler.getPreviousConf().getProcessCountIntervalSeconds() != countTime) { jobScheduler.getPreviousConf().setProcessCountIntervalSeconds(countTime); jobScheduler.rescheduleProcessCountJob(); } } @Override public void disableJob() { } @Override public void onResharding() { } }