下面列出了怎么用org.quartz.SimpleScheduleBuilder的API类实例代码及写法,或者点击链接到github查看源代码。
private SimpleScheduleBuilder handleSimpleScheduleMisfirePolicy(TaskInfo.TriggerInfo triggerInfo,
SimpleScheduleBuilder sb) throws TaskException {
switch (triggerInfo.getMisfirePolicy()) {
case DEFAULT:
return sb;
case FIRE_NOW:
return sb.withMisfireHandlingInstructionFireNow();
case IGNORE_MISFIRES:
return sb.withMisfireHandlingInstructionIgnoreMisfires();
case NEXT_WITH_EXISTING_COUNT:
return sb.withMisfireHandlingInstructionNextWithExistingCount();
case NEXT_WITH_REMAINING_COUNT:
return sb.withMisfireHandlingInstructionNextWithRemainingCount();
case NOW_WITH_EXISTING_COUNT:
return sb.withMisfireHandlingInstructionNowWithExistingCount();
case NOW_WITH_REMAINING_COUNT:
return sb.withMisfireHandlingInstructionNowWithRemainingCount();
default:
throw new TaskException("The task misfire policy '" + triggerInfo.getMisfirePolicy()
+ "' cannot be used in simple schedule tasks",
TaskException.Code.CONFIG_ERROR);
}
}
@Override
public List<Task> load(Object... args) {
@SuppressWarnings("unchecked")
List<HTLCResourcePair> htlcResourcePairs = (List<HTLCResourcePair>) args[0];
List<Task> tasks = new ArrayList<>();
int num = htlcResourcePairs.size();
for (int i = 0; i < num; i++) {
HTLCResourcePair htlcResourcePair = htlcResourcePairs.get(i);
logger.debug("HTLCResourcePair: {}", htlcResourcePair.toString());
String jobName = htlcResourcePair.getSelfHTLCResource().getSelfPath().toString();
JobDetail jobDetail = loadHTLCJobDetail(jobName, "HTLC", htlcResourcePair);
// execute per 2 seconds
Trigger trigger =
TriggerBuilder.newTrigger()
.withIdentity(jobName, Scheduler.DEFAULT_GROUP)
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
tasks.add(new Task(trigger, jobDetail));
}
return tasks;
}
@Test
void testDirectoryScan() throws SchedulerException, IOException {
Path directoryScanTest = Files.createTempDirectory("DirectoryScanTest");
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger")
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForTotalCount(1, 1))
.build();
final JobDetail job = JobBuilder.newJob(DirectoryScanJob.class)
.withIdentity("dummyJobName")
.usingJobData(DirectoryScanJob.DIRECTORY_NAME, directoryScanTest.toAbsolutePath().toString())
.usingJobData(DirectoryScanJob.DIRECTORY_SCAN_LISTENER_NAME, TestDirectoryScanListener.class.getSimpleName())
.build();
scheduler.getContext().put(TestDirectoryScanListener.class.getSimpleName(), new TestDirectoryScanListener());
scheduler.scheduleJob(job, trigger);
verifyJobDetails(job);
}
public static TaskTrigger getIntervalTask(long interval, long delay, Class<? extends Job> jobClass) {
JobDetail job = JobBuilder.newJob(jobClass).withIdentity(jobClass.getName()).build();
Trigger trigger;
if (delay > 0) {
trigger = TriggerBuilder.newTrigger()
.withIdentity(jobClass.getName())
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startAt(new Date(System.currentTimeMillis() + delay)).build();
} else {
trigger = TriggerBuilder.newTrigger()
.withIdentity(jobClass.getName())
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startNow().build();
}
return new TaskTrigger(job, trigger);
}
public static TaskTrigger getIntervalTask(long interval, long delay, String taskName, TaskJob taskJob) {
JobDetail job = JobBuilder.newJob(TaskObjJob.class).withIdentity(taskName).build();
Trigger trigger;
if (delay > 0) {
trigger = TriggerBuilder.newTrigger()
.withIdentity(taskName)
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startAt(new Date(System.currentTimeMillis() + delay)).build();
} else {
trigger = TriggerBuilder.newTrigger()
.withIdentity(taskName)
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startNow().build();
}
TaskObjJob.bindTriggerWithObj(trigger, taskJob);
return new TaskTrigger(job, trigger);
}
public static TaskTrigger getIntervalTask(long interval, long delay, MethodInvoke methodInvoke) {
JobDetail job = JobBuilder.newJob(TaskMethodJob.class).withIdentity(methodInvoke.getMethod().getName(), methodInvoke.getObj().getClass().getName()).build();
Trigger trigger;
if (delay > 0) {
trigger = TriggerBuilder.newTrigger()
.withIdentity(methodInvoke.getMethod().getName(), methodInvoke.getObj().getClass().getName())
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startAt(new Date(System.currentTimeMillis() + delay)).build();
} else {
trigger = TriggerBuilder.newTrigger()
.withIdentity(methodInvoke.getMethod().getName(), methodInvoke.getObj().getClass().getName())
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(interval).repeatForever())
.startNow().build();
}
TaskMethodJob.bindTriggerWithMethod(trigger, methodInvoke);
return new TaskTrigger(job, trigger);
}
/**
* Refresh metadata. Schedules the job to retrieve metadata.
* @throws SchedulerException the scheduler exception
*/
@PostConstruct
public void refreshMetadata() throws SchedulerException {
final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
buildMetadataResolverAggregate();
}
});
thread.start();
final JobDetail job = JobBuilder.newJob(this.getClass())
.withIdentity(this.getClass().getSimpleName()).build();
final Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(this.refreshIntervalInMinutes)
.repeatForever()).build();
final SchedulerFactory schFactory = new StdSchedulerFactory();
final Scheduler sch = schFactory.getScheduler();
sch.start();
sch.scheduleJob(job, trigger);
}
/**
* Get a {@link ScheduleBuilder} that is configured to produce a
* schedule identical to this trigger's schedule.
*
* @see #getTriggerBuilder()
*/
@Override
public ScheduleBuilder<SimpleTrigger> getScheduleBuilder() {
SimpleScheduleBuilder sb = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(getRepeatInterval())
.withRepeatCount(getRepeatCount());
switch(getMisfireInstruction()) {
case MISFIRE_INSTRUCTION_FIRE_NOW : sb.withMisfireHandlingInstructionFireNow();
break;
case MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT : sb.withMisfireHandlingInstructionNextWithExistingCount();
break;
case MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT : sb.withMisfireHandlingInstructionNextWithRemainingCount();
break;
case MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT : sb.withMisfireHandlingInstructionNowWithExistingCount();
break;
case MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT : sb.withMisfireHandlingInstructionNowWithRemainingCount();
break;
}
return sb;
}
public void start(){
// for job
JobDetail job = JobBuilder.newJob(jobCls)
.withIdentity(jobCls.getName() + ".job", QUARTZ_GROUP_NAME)
.setJobData(jobDataMap)
.build();
// for trigger
Object interval = jobDataMap.get(DATA_JOIN_POLL_INTERVALSEC);
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobCls.getName() + ".trigger", QUARTZ_GROUP_NAME)
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(interval == null ? defaultIntervalSeconds : ((Integer)interval).intValue())
.repeatForever())
.build();
try{
sched.scheduleJob(job, trigger);
}catch(Exception ex){
LOG.error("Can't schedule job " + job.getDescription(), ex);
}
}
/**
* Creates a new quartz scheduler Trigger, which can be used to
* schedule a new job by passing it into {@link io.mangoo.scheduler.Scheduler#schedule(JobDetail, Trigger) schedule}
*
* @param identity The name of the trigger
* @param groupName The trigger group name
* @param description The trigger description
* @param timespan The timespan for the trigger
* @param timeUnit The timeUnit for the trigger
*
* @return A new Trigger object
*/
public static Trigger createTrigger(String identity, String groupName, String description, int timespan, TimeUnit timeUnit) {
Objects.requireNonNull(identity, Required.IDENTITY.toString());
Objects.requireNonNull(groupName, Required.GROUP_NAME.toString());
Objects.requireNonNull(timespan, Required.TIMEPSAN.toString());
Objects.requireNonNull(timeUnit, Required.TIMEUNIT.toString());
TriggerBuilder<Trigger> triggerBuilder = newTrigger()
.withDescription(description)
.withIdentity(identity, groupName);
if (timeUnit == TimeUnit.SECONDS) {
triggerBuilder.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(timespan));
} else if (timeUnit == TimeUnit.MINUTES) {
triggerBuilder.withSchedule(SimpleScheduleBuilder.repeatMinutelyForever(timespan));
} else if (timeUnit == TimeUnit.HOURS) {
triggerBuilder.withSchedule(SimpleScheduleBuilder.repeatHourlyForever(timespan));
} else if (timeUnit == TimeUnit.DAYS) {
triggerBuilder.withSchedule(SimpleScheduleBuilder.repeatHourlyForever(timespan * TWENTYFOUR_HORS));
} else {
//do nothing
}
return triggerBuilder.build();
}
@Test
public void serialization(){
SimpleTrigger trigger = TriggerBuilder.newTrigger()
.forJob("testJob", "testGroup")
.withIdentity("testTrigger", "testTriggerGroup")
.usingJobData("timeout", 5)
.withDescription("A description!")
.withSchedule(SimpleScheduleBuilder.repeatHourlyForever())
.build();
Map<String, String> triggerMap = mapper.convertValue(trigger, new TypeReference<HashMap<String, String>>() {});
assertThat(triggerMap, hasKey("name"));
assertEquals("testTrigger", triggerMap.get("name"));
assertThat(triggerMap, hasKey("group"));
assertEquals("testTriggerGroup", triggerMap.get("group"));
assertThat(triggerMap, hasKey("jobName"));
assertEquals("testJob", triggerMap.get("jobName"));
SimpleTriggerImpl simpleTrigger = mapper.convertValue(triggerMap, SimpleTriggerImpl.class);
assertEquals(trigger.getKey().getName(), simpleTrigger.getKey().getName());
assertEquals(trigger.getKey().getGroup(), simpleTrigger.getKey().getGroup());
assertEquals(trigger.getStartTime(), simpleTrigger.getStartTime());
assertEquals(trigger.getRepeatInterval(), simpleTrigger.getRepeatInterval());
}
public Trigger getTrigger(Trigger trigger) throws ParseException {
fixParameters();
TriggerBuilder<Trigger> builder = TriggerBuilder.newTrigger().forJob(trigger.getJobKey().getName(), trigger.getJobKey().getGroup())
.withIdentity(trigger.getKey().getName(), trigger.getKey().getGroup())
.startAt(startTime).endAt(endTime)
.usingJobData(JobDataMapUtils.fromDataMapStr(dataMap));
if (repeatCount == -1) {
builder.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatForever()
.withIntervalInMilliseconds(intervalInMilliseconds));
} else {
builder.withSchedule(SimpleScheduleBuilder.simpleSchedule().withRepeatCount(repeatCount)
.withIntervalInMilliseconds(intervalInMilliseconds));
}
return builder.build();
}
public Trigger getTrigger() throws ParseException {
fixParameters();
TriggerBuilder<Trigger> builder = TriggerBuilder.newTrigger().forJob(name.trim(), group.trim()).withIdentity(triggerName.trim(), triggerGroup.trim())
.startAt(startTime).endAt(endTime)
.usingJobData(JobDataMapUtils.fromDataMapStr(dataMap));
if (repeatCount == -1) {
builder.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatForever()
.withIntervalInMilliseconds(intervalInMilliseconds));
} else {
builder.withSchedule(SimpleScheduleBuilder.simpleSchedule().withRepeatCount(repeatCount)
.withIntervalInMilliseconds(intervalInMilliseconds));
}
return builder.build();
}
private SimpleScheduleBuilder getSimpleScheduleBuilder(TaskInfo.TriggerInfo triggerInfo) throws TaskException {
SimpleScheduleBuilder scheduleBuilder = null;
if (triggerInfo.getRepeatCount() == -1) {
scheduleBuilder = SimpleScheduleBuilder.simpleSchedule().repeatForever();
} else if (triggerInfo.getRepeatCount() > 0) {
scheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withRepeatCount(triggerInfo.getRepeatCount());
}
if (scheduleBuilder != null) {
scheduleBuilder = scheduleBuilder.withIntervalInMilliseconds(triggerInfo.getIntervalMillis());
scheduleBuilder = this.handleSimpleScheduleMisfirePolicy(triggerInfo, scheduleBuilder);
}
return scheduleBuilder;
}
@Test
void testJobWithGroup() throws SchedulerException {
JobDetail job = JobBuilder.newJob(TestJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger")
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForTotalCount(1, 1))
.build();
scheduler.scheduleJob(job, trigger);
verifyJobDetails(job);
}
@Test
void testJobWithoutGroup() throws SchedulerException {
JobDetail job = JobBuilder.newJob(TestJob.class)
.withIdentity("dummyJobName").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger")
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForTotalCount(1, 1))
.build();
scheduler.scheduleJob(job, trigger);
verifyJobDetails(job);
}
@Test
void testSpringJob() throws SchedulerException {
JobDetail job = JobBuilder.newJob(TestSpringJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger")
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForTotalCount(1, 1))
.build();
scheduler.scheduleJob(job, trigger);
verifyJobDetails(job);
}
@Test
void testJobWithResult() throws SchedulerException {
JobDetail job = JobBuilder.newJob(TestJobWithResult.class)
.withIdentity("dummyJobName").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("myTrigger")
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForTotalCount(1, 1))
.build();
scheduler.scheduleJob(job, trigger);
verifyJobDetails(job);
assertThat(reporter.getTransactions().get(0).getResult()).isEqualTo("this is the result");
}
@Bean
public Trigger simpleJobTrigger() {
//定义每三秒执行一次
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever();
//定义触发器
return TriggerBuilder.newTrigger().forJob(simpleJobDetail()).withIdentity("myJobTrigger").withSchedule(simpleScheduleBuilder).build();
}
@Transactional
@PostConstruct
void init() throws SchedulerException {
JobDetail job = JobBuilder.newJob(CountingJob.class).build();
Trigger trigger = TriggerBuilder
.newTrigger()
.startNow()
.withSchedule(SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(1))
.build();
quartz.scheduleJob(job, trigger);
}
void onStart(@Observes StartupEvent event, Scheduler quartz) throws SchedulerException {
JobDetail job = JobBuilder.newJob(Starter.class)
.withIdentity("myJob", "myGroup")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "myGroup")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
quartz.scheduleJob(job, trigger);
}
public <T extends AbstractJob> void scheduleLocal(Class<T> cls, Integer delay, Integer interval) throws Exception {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("context", this);
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(cls.getName(), clazz.getName())
.usingJobData(jobDataMap).withDescription(Config.node()).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(cls.getName(), clazz.getName())
.withDescription("scheduleLocal").startAt(DateBuilder.futureDate(delay, IntervalUnit.SECOND))
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(interval).repeatForever())
.build();
scheduler.scheduleJob(jobDetail, trigger);
this.scheduleLocalRequestList.add(new ScheduleLocalRequest(jobDetail, null, delay, interval));
}
public <T extends AbstractJob> void fireScheduleOnLocal(Class<T> cls, Integer delay) throws Exception {
/* 需要单独生成一个独立任务,保证group和预约的任务不重复 */
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("context", this);
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(cls.getName(), clazz.getName())
.usingJobData(jobDataMap).withDescription(Config.node()).build();
/* 经过测试0代表不重复,仅运行一次 */
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(cls.getName(), clazz.getName())
.withDescription("schedule").startAt(DateBuilder.futureDate(delay, IntervalUnit.SECOND))
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(0))
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
public <T extends AbstractJob> void scheduleLocal(Class<T> cls, Integer delay) throws Exception {
/* 需要单独生成一个独立任务,保证group和预约的任务不重复 */
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("context", this);
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(cls.getName(), clazz.getName())
.usingJobData(jobDataMap).withDescription(Config.node()).build();
/* 经过测试0代表不重复,仅运行一次 */
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(cls.getName(), clazz.getName())
.withDescription("scheduleLocal").startAt(DateBuilder.futureDate(delay, IntervalUnit.SECOND))
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(0))
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
public <T extends Job> void scheduleLocal(Class<T> cls, Integer delay, Integer interval) throws Exception {
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(cls.getName(), clazz.getName())
.withDescription(Config.node()).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(cls.getName(), clazz.getName())
.withDescription("scheduleLocal").startAt(DateBuilder.futureDate(delay, IntervalUnit.SECOND))
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(interval).repeatForever())
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
public <T extends Job> void scheduleLocal(Class<T> cls) throws Exception {
/* 需要单独生成一个独立任务,保证group和预约的任务不重复 */
String group = StringTools.uniqueToken();
JobDetail jobDetail = JobBuilder.newJob(cls).withIdentity(cls.getName(), group).withDescription(Config.node())
.build();
/* 经过测试0代表不重复,进运行一次 */
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(cls.getName(), group)
.withDescription("scheduleLocal")
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(0))
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
/**
* Check that all properties are properly set
*/
public void init() throws SchedulerException
{
PropertyCheck.mandatory(this, "scheduler", scheduler);
PropertyCheck.mandatory(this, "transactionService", transactionService);
PropertyCheck.mandatory(this, "repoUsageComponent", repoUsageComponent);
PropertyCheck.mandatory(this, "jobLockService", jobLockService);
// Trigger the scheduled updates
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("RepoUsageMonitor", this);
final JobDetail jobDetail = JobBuilder.newJob()
.withIdentity("rmj")
.usingJobData(jobDataMap)
.ofType(RepoUsageMonitorJob.class)
.build();
final Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("rmt")
.withSchedule(SimpleScheduleBuilder.repeatHourlyForever().withIntervalInHours(12))
.startAt(new Date(System.currentTimeMillis() + 60L * 60L * 1000L))
.build();
repoUsageComponent.observeRestrictions(this);
// Unschedule in case it was scheduled in an earlier retry of the transaction
scheduler.unscheduleJob(trigger.getKey());
scheduler.scheduleJob(jobDetail, trigger);
}
public TriggerPropertyBundle loadExtendedTriggerProperties(Connection conn, TriggerKey triggerKey) throws SQLException {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(Util.rtp(SELECT_SIMPLE_TRIGGER, tablePrefix, schedNameLiteral));
ps.setString(1, triggerKey.getName());
ps.setString(2, triggerKey.getGroup());
rs = ps.executeQuery();
if (rs.next()) {
int repeatCount = rs.getInt(COL_REPEAT_COUNT);
long repeatInterval = rs.getLong(COL_REPEAT_INTERVAL);
int timesTriggered = rs.getInt(COL_TIMES_TRIGGERED);
SimpleScheduleBuilder sb = SimpleScheduleBuilder.simpleSchedule()
.withRepeatCount(repeatCount)
.withIntervalInMilliseconds(repeatInterval);
String[] statePropertyNames = { "timesTriggered" };
Object[] statePropertyValues = { timesTriggered };
return new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues);
}
throw new IllegalStateException("No record found for selection of Trigger with key: '" + triggerKey + "' and statement: " + Util.rtp(SELECT_SIMPLE_TRIGGER, tablePrefix, schedNameLiteral));
} finally {
Util.closeResultSet(rs);
Util.closeStatement(ps);
}
}
public static void scheduleChannelReg(String identifier) {
// add another job for registering channel to ekstep.
// 1- create a job and bind with class which is implementing Job
// interface.
JobDetail channelRegistrationJob =
JobBuilder.newJob(ChannelRegistrationScheduler.class)
.requestRecovery(true)
.withDescription("Scheduler for channel registration")
.withIdentity("channelRegistrationScheduler", identifier)
.build();
// 2- Create a trigger object that will define frequency of run.
// It will run only once after server startup
Trigger channelRegistrationTrigger =
TriggerBuilder.newTrigger()
.withIdentity("channelRegistrationScheduler", identifier)
.withSchedule(SimpleScheduleBuilder.repeatMinutelyForTotalCount(1))
.build();
try {
if (scheduler.checkExists(channelRegistrationJob.getKey())) {
scheduler.deleteJob(channelRegistrationJob.getKey());
}
scheduler.scheduleJob(channelRegistrationJob, channelRegistrationTrigger);
scheduler.start();
ProjectLogger.log(
"SchedulerManager:scheduleChannelReg: channelRegistration schedular started",
LoggerEnum.INFO.name());
} catch (Exception e) {
ProjectLogger.log(e.getMessage(), e);
}
}
@PostMapping("/config")
public SchedulerConfigParam postConfig(@RequestBody SchedulerConfigParam config) throws SchedulerException {
log.info("SCHEDULER - NEW CONFIG {}", config);
SimpleTrigger trigger = (SimpleTrigger) triggerMonitor.getTrigger();
TriggerBuilder<SimpleTrigger> triggerBuilder = trigger.getTriggerBuilder();
int intervalInMills = fromTriggerPerDayToMillsInterval(config.getTriggerPerDay());
Trigger newTrigger = triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(intervalInMills).withRepeatCount(config.getMaxCount() - 1)).build();
scheduler.rescheduleJob(triggerMonitor.getTrigger().getKey(), newTrigger);
triggerMonitor.setTrigger(newTrigger);
return config;
}