mirror of
https://github.com/fabioformosa/quartz-manager.git
synced 2026-05-14 22:00:30 +09:00
This commit is contained in:
@@ -14,15 +14,18 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter<SimpleT
|
|||||||
@Override
|
@Override
|
||||||
public SimpleTrigger convert(SimpleTriggerCommandDTO triggerCommandDTO) {
|
public SimpleTrigger convert(SimpleTriggerCommandDTO triggerCommandDTO) {
|
||||||
TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
|
TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
|
||||||
if(triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate() != null)
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate() != null)
|
||||||
triggerTriggerBuilder.startAt(triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate());
|
triggerTriggerBuilder.startAt(triggerCommandDTO.getSimpleTriggerInputDTO().getStartDate());
|
||||||
if(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null)
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null)
|
||||||
triggerTriggerBuilder.endAt(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate());
|
triggerTriggerBuilder.endAt(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate());
|
||||||
|
|
||||||
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
|
|
||||||
.withIntervalInMilliseconds(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval())
|
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
|
||||||
.withRepeatCount(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount())
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval() != null)
|
||||||
.withMisfireHandlingInstructionNextWithRemainingCount();
|
scheduleBuilder.withIntervalInMilliseconds(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval());
|
||||||
|
|
||||||
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount() != null)
|
||||||
|
scheduleBuilder.withRepeatCount(triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount());
|
||||||
|
|
||||||
setTheMisfireInstruction(triggerCommandDTO, scheduleBuilder);
|
setTheMisfireInstruction(triggerCommandDTO, scheduleBuilder);
|
||||||
|
|
||||||
@@ -35,7 +38,7 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter<SimpleT
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void setTheMisfireInstruction(SimpleTriggerCommandDTO triggerCommandDTO, SimpleScheduleBuilder scheduleBuilder) {
|
private static void setTheMisfireInstruction(SimpleTriggerCommandDTO triggerCommandDTO, SimpleScheduleBuilder scheduleBuilder) {
|
||||||
switch (triggerCommandDTO.getSimpleTriggerInputDTO().getMisfireInstruction()){
|
switch (triggerCommandDTO.getSimpleTriggerInputDTO().getMisfireInstruction()) {
|
||||||
case MISFIRE_INSTRUCTION_FIRE_NOW:
|
case MISFIRE_INSTRUCTION_FIRE_NOW:
|
||||||
scheduleBuilder.withMisfireHandlingInstructionFireNow();
|
scheduleBuilder.withMisfireHandlingInstructionFireNow();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -17,5 +17,5 @@ public class SimpleTriggerInputDTO extends TriggerCommandDTO {
|
|||||||
private Integer repeatCount;
|
private Integer repeatCount;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
Long repeatInterval;
|
private Long repeatInterval;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class TriggerCommandDTO {
|
|||||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
|
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
|
||||||
private Date endDate;
|
private Date endDate;
|
||||||
|
|
||||||
|
@Builder.Default
|
||||||
private MisfireInstruction misfireInstruction = MisfireInstruction.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT;
|
private MisfireInstruction misfireInstruction = MisfireInstruction.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ public class SimpleTriggerService extends AbstractSchedulerService {
|
|||||||
return conversionService.convert(trigger, SimpleTriggerDTO.class);
|
return conversionService.convert(trigger, SimpleTriggerDTO.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SimpleTriggerDTO scheduleSimpleTrigger(SimpleTriggerCommandDTO triggerCommandDTO) throws SchedulerException, ClassNotFoundException {
|
public SimpleTriggerDTO scheduleSimpleTrigger(SimpleTriggerCommandDTO simpleTriggerCommandDTO) throws SchedulerException, ClassNotFoundException {
|
||||||
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(triggerCommandDTO.getSimpleTriggerInputDTO().getJobClass());
|
Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(simpleTriggerCommandDTO.getSimpleTriggerInputDTO().getJobClass());
|
||||||
JobDetail jobDetail = JobBuilder.newJob()
|
JobDetail jobDetail = JobBuilder.newJob()
|
||||||
.ofType(jobClass)
|
.ofType(jobClass)
|
||||||
.storeDurably(false)
|
.storeDurably(false)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
SimpleTrigger newSimpleTrigger = conversionService.convert(triggerCommandDTO, SimpleTrigger.class);
|
SimpleTrigger newSimpleTrigger = conversionService.convert(simpleTriggerCommandDTO, SimpleTrigger.class);
|
||||||
scheduler.scheduleJob(jobDetail, newSimpleTrigger);
|
scheduler.scheduleJob(jobDetail, newSimpleTrigger);
|
||||||
|
|
||||||
return conversionService.convert(newSimpleTrigger, SimpleTriggerDTO.class);
|
return conversionService.convert(newSimpleTrigger, SimpleTriggerDTO.class);
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ public class TriggerUtils {
|
|||||||
static public TriggerDTO getTriggerInstance(String triggerName){
|
static public TriggerDTO getTriggerInstance(String triggerName){
|
||||||
return TriggerDTO.builder()
|
return TriggerDTO.builder()
|
||||||
.description("sample trigger")
|
.description("sample trigger")
|
||||||
.endTime(DateUtils.getHoursFromNow(2L))
|
.endTime(DateUtils.addHoursToNow(2L))
|
||||||
.finalFireTime(DateUtils.getHoursFromNow(2L))
|
.finalFireTime(DateUtils.addHoursToNow(2L))
|
||||||
.jobKeyDTO(JobKeyDTO.builder()
|
.jobKeyDTO(JobKeyDTO.builder()
|
||||||
.group("defaultJobGroup")
|
.group("defaultJobGroup")
|
||||||
.name("sampleJob")
|
.name("sampleJob")
|
||||||
@@ -22,9 +22,9 @@ public class TriggerUtils {
|
|||||||
.name(triggerName)
|
.name(triggerName)
|
||||||
.build())
|
.build())
|
||||||
.misfireInstruction(1)
|
.misfireInstruction(1)
|
||||||
.nextFireTime(DateUtils.getHoursFromNow(1L))
|
.nextFireTime(DateUtils.addHoursToNow(1L))
|
||||||
.priority(1)
|
.priority(1)
|
||||||
.startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now()))
|
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,8 +33,8 @@ public class TriggerUtils {
|
|||||||
.description("simple trigger")
|
.description("simple trigger")
|
||||||
.repeatCount(simpleTriggerInputDTO.getRepeatCount())
|
.repeatCount(simpleTriggerInputDTO.getRepeatCount())
|
||||||
.repeatInterval(simpleTriggerInputDTO.getRepeatInterval())
|
.repeatInterval(simpleTriggerInputDTO.getRepeatInterval())
|
||||||
.endTime(DateUtils.getHoursFromNow(2L))
|
.endTime(DateUtils.addHoursToNow(2L))
|
||||||
.finalFireTime(DateUtils.getHoursFromNow(2L))
|
.finalFireTime(DateUtils.addHoursToNow(2L))
|
||||||
.jobKeyDTO(JobKeyDTO.builder()
|
.jobKeyDTO(JobKeyDTO.builder()
|
||||||
.group("defaultJobGroup")
|
.group("defaultJobGroup")
|
||||||
.name("sampleJob")
|
.name("sampleJob")
|
||||||
@@ -45,9 +45,9 @@ public class TriggerUtils {
|
|||||||
.name(triggerName)
|
.name(triggerName)
|
||||||
.build())
|
.build())
|
||||||
.misfireInstruction(1)
|
.misfireInstruction(1)
|
||||||
.nextFireTime(DateUtils.getHoursFromNow(1L))
|
.nextFireTime(DateUtils.addHoursToNow(1L))
|
||||||
.priority(1)
|
.priority(1)
|
||||||
.startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now()))
|
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,8 +56,8 @@ public class TriggerUtils {
|
|||||||
.description("simple trigger")
|
.description("simple trigger")
|
||||||
.repeatCount(2)
|
.repeatCount(2)
|
||||||
.repeatInterval(1000L)
|
.repeatInterval(1000L)
|
||||||
.endTime(DateUtils.getHoursFromNow(2L))
|
.endTime(DateUtils.addHoursToNow(2L))
|
||||||
.finalFireTime(DateUtils.getHoursFromNow(2L))
|
.finalFireTime(DateUtils.addHoursToNow(2L))
|
||||||
.jobKeyDTO(JobKeyDTO.builder()
|
.jobKeyDTO(JobKeyDTO.builder()
|
||||||
.group("defaultJobGroup")
|
.group("defaultJobGroup")
|
||||||
.name("sampleJob")
|
.name("sampleJob")
|
||||||
@@ -68,9 +68,9 @@ public class TriggerUtils {
|
|||||||
.name(triggerName)
|
.name(triggerName)
|
||||||
.build())
|
.build())
|
||||||
.misfireInstruction(1)
|
.misfireInstruction(1)
|
||||||
.nextFireTime(DateUtils.getHoursFromNow(1L))
|
.nextFireTime(DateUtils.addHoursToNow(1L))
|
||||||
.priority(1)
|
.priority(1)
|
||||||
.startTime(DateUtils.fromLocaleDateTimeToDate(LocalDateTime.now()))
|
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package it.fabioformosa.quartzmanager.api.services;
|
||||||
|
|
||||||
|
import it.fabioformosa.quartzmanager.api.common.utils.DateUtils;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.MisfireInstruction;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerCommandDTO;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerDTO;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerInputDTO;
|
||||||
|
import org.assertj.core.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.quartz.SchedulerException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
class SimpleTriggerServiceIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SimpleTriggerService simpleTriggerService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenASimpleTriggerCommandDTOWithAllData_whenANewSimpleTriggerIsScheduled_thenShouldGetATriggertDTO() throws SchedulerException, ClassNotFoundException {
|
||||||
|
String simpleTriggerTestName = "simpleTriggerTest";
|
||||||
|
String jobClass = "it.fabioformosa.quartzmanager.api.jobs.SampleJob";
|
||||||
|
Date startDate = new Date();
|
||||||
|
Date endDate = DateUtils.addHoursToNow(5);
|
||||||
|
int repeatCount = 3;
|
||||||
|
long repeatInterval = 1000L * 60 * 60;
|
||||||
|
LocalDateTime expectedFinalDateTime = DateUtils.fromDateToLocalDateTime(startDate).plus(Duration.ofHours(3));
|
||||||
|
LocalDateTime expectedNextDateTime = DateUtils.fromDateToLocalDateTime(startDate).plus(Duration.ofMinutes(1));
|
||||||
|
MisfireInstruction misfireInstructionFireNow = MisfireInstruction.MISFIRE_INSTRUCTION_FIRE_NOW;
|
||||||
|
|
||||||
|
SimpleTriggerCommandDTO simpleTriggerCommand = SimpleTriggerCommandDTO.builder()
|
||||||
|
.triggerName(simpleTriggerTestName)
|
||||||
|
.simpleTriggerInputDTO(SimpleTriggerInputDTO.builder()
|
||||||
|
.startDate(startDate)
|
||||||
|
.endDate(endDate)
|
||||||
|
.repeatCount(repeatCount)
|
||||||
|
.repeatInterval(repeatInterval)
|
||||||
|
.misfireInstruction(misfireInstructionFireNow)
|
||||||
|
.jobClass(jobClass)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
SimpleTriggerDTO simpleTriggerDTO = simpleTriggerService.scheduleSimpleTrigger(simpleTriggerCommand);
|
||||||
|
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getTriggerKeyDTO().getName()).isEqualTo(simpleTriggerTestName);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getStartTime()).isEqualTo(startDate);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getEndTime()).isEqualTo(endDate);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(repeatCount);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(repeatInterval);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getMisfireInstruction()).isEqualTo(misfireInstructionFireNow.getNum());
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isEqualTo(DateUtils.fromLocalDateTimeToDate(expectedFinalDateTime));
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getNextFireTime()).isEqualTo(DateUtils.fromLocalDateTimeToDate(expectedNextDateTime));
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenASimpleTriggerCommandDTOWithMissingOptionalField_whenANewSimpleTriggerIsScheduled_thenShouldGetATriggertDTO() throws SchedulerException, ClassNotFoundException {
|
||||||
|
String simpleTriggerTestName = "simpleTriggerTest";
|
||||||
|
String jobClass = "it.fabioformosa.quartzmanager.api.jobs.SampleJob";
|
||||||
|
|
||||||
|
SimpleTriggerCommandDTO simpleTriggerCommand = SimpleTriggerCommandDTO.builder()
|
||||||
|
.triggerName(simpleTriggerTestName)
|
||||||
|
.simpleTriggerInputDTO(SimpleTriggerInputDTO.builder()
|
||||||
|
.jobClass(jobClass)
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
SimpleTriggerDTO simpleTriggerDTO = simpleTriggerService.scheduleSimpleTrigger(simpleTriggerCommand);
|
||||||
|
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getTriggerKeyDTO().getName()).isEqualTo(simpleTriggerTestName);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getTimesTriggered()).isEqualTo(0);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getJobKeyDTO().getName()).isNotNull();
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getStartTime()).isNotNull();
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getEndTime()).isNull();
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getFinalFireTime()).isNotNull();
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(0);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -51,7 +51,7 @@ class SimpleTriggerServiceTest {
|
|||||||
.jobClass("it.fabioformosa.quartzmanager.api.jobs.SampleJob")
|
.jobClass("it.fabioformosa.quartzmanager.api.jobs.SampleJob")
|
||||||
.startDate(new Date())
|
.startDate(new Date())
|
||||||
.repeatInterval(5000L).repeatCount(5)
|
.repeatInterval(5000L).repeatCount(5)
|
||||||
.endDate(DateUtils.getHoursFromNow(1))
|
.endDate(DateUtils.addHoursToNow(1))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
String simpleTriggerName = "simpleTrigger";
|
String simpleTriggerName = "simpleTrigger";
|
||||||
|
|||||||
Reference in New Issue
Block a user