mirror of
https://github.com/fabioformosa/quartz-manager.git
synced 2026-05-14 22:00:30 +09:00
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
/.project
|
/.project
|
||||||
|
.idea
|
||||||
|
*.iml
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
## **v4.0.9**
|
||||||
|
Fixed a bug which prevented to run the liquibase migration scripts in case of usage of quartz-manager-starter-persistence
|
||||||
|
|
||||||
## **v4.0.8**
|
## **v4.0.8**
|
||||||
Upgraded the frontend to angular v14
|
Upgraded the frontend to angular v14
|
||||||
|
|
||||||
|
|||||||
1
quartz-manager-parent/.gitignore
vendored
1
quartz-manager-parent/.gitignore
vendored
@@ -4,3 +4,4 @@
|
|||||||
.classpath
|
.classpath
|
||||||
.project
|
.project
|
||||||
.idea
|
.idea
|
||||||
|
*.iml
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
|
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
@@ -78,27 +78,27 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-common</artifactId>
|
<artifactId>quartz-manager-common</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-starter-api</artifactId>
|
<artifactId>quartz-manager-starter-api</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-starter-security</artifactId>
|
<artifactId>quartz-manager-starter-security</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-starter-persistence</artifactId>
|
<artifactId>quartz-manager-starter-persistence</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-starter-ui</artifactId>
|
<artifactId>quartz-manager-starter-ui</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>quartz-manager-common</artifactId>
|
<artifactId>quartz-manager-common</artifactId>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>quartz-manager-starter-api</artifactId>
|
<artifactId>quartz-manager-starter-api</artifactId>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package it.fabioformosa.quartzmanager.api.configuration;
|
package it.fabioformosa.quartzmanager.api.configuration;
|
||||||
|
|
||||||
|
import it.fabioformosa.quartzmanager.api.common.config.QuartzManagerPaths;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
|
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
|
||||||
@@ -14,14 +15,16 @@ public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configureMessageBroker(MessageBrokerRegistry config) {
|
public void configureMessageBroker(MessageBrokerRegistry config) {
|
||||||
config.enableSimpleBroker("/topic");
|
config.enableSimpleBroker("/topic"); //enable a simple memory-based message broker
|
||||||
config.setApplicationDestinationPrefixes("/job");
|
// on destinations prefixed with /topic
|
||||||
|
config.setApplicationDestinationPrefixes("/job"); // it designates the prefix for messages
|
||||||
|
// that are bound for methods annotated with @MessageMapping
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
public void registerStompEndpoints(StompEndpointRegistry registry) {
|
||||||
registry.addEndpoint("/quartz-manager/logs").setAllowedOrigins("/**").withSockJS();
|
registry.addEndpoint(QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/logs").setAllowedOrigins("/**").withSockJS();
|
||||||
registry.addEndpoint("/quartz-manager/progress").setAllowedOrigins("/**").withSockJS();
|
registry.addEndpoint(QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/progress").setAllowedOrigins("/**").withSockJS();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ import org.springframework.stereotype.Controller;
|
|||||||
@Controller
|
@Controller
|
||||||
public class WebsocketController {
|
public class WebsocketController {
|
||||||
|
|
||||||
@MessageMapping({ QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/logs", QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/progress" })
|
@MessageMapping({
|
||||||
|
QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/logs",
|
||||||
|
QuartzManagerPaths.QUARTZ_MANAGER_BASE_CONTEXT_PATH + "/progress"
|
||||||
|
})
|
||||||
@SendTo("/topic/logs")
|
@SendTo("/topic/logs")
|
||||||
public String subscribe() {
|
public String subscribe() {
|
||||||
return "subscribed";
|
return "subscribed";
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package it.fabioformosa.quartzmanager.api.converters;
|
|||||||
|
|
||||||
|
|
||||||
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerCommandDTO;
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerCommandDTO;
|
||||||
|
import org.quartz.JobDataMap;
|
||||||
import org.quartz.SimpleScheduleBuilder;
|
import org.quartz.SimpleScheduleBuilder;
|
||||||
import org.quartz.SimpleTrigger;
|
import org.quartz.SimpleTrigger;
|
||||||
import org.quartz.Trigger;
|
import org.quartz.Trigger;
|
||||||
@@ -19,6 +20,8 @@ public class SimpleTriggerCommandDTOToSimpleTrigger implements Converter<SimpleT
|
|||||||
if (triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null)
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate() != null)
|
||||||
triggerTriggerBuilder.endAt(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate());
|
triggerTriggerBuilder.endAt(triggerCommandDTO.getSimpleTriggerInputDTO().getEndDate());
|
||||||
|
|
||||||
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getJobDataMap() != null)
|
||||||
|
triggerTriggerBuilder.usingJobData(new JobDataMap(triggerCommandDTO.getSimpleTriggerInputDTO().getJobDataMap()));
|
||||||
|
|
||||||
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
|
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
|
||||||
if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval() != null)
|
if (triggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval() != null)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class SimpleTriggerToSimpleTriggerDTO extends TriggerToTriggerDTO<SimpleT
|
|||||||
target.setRepeatCount(source.getRepeatCount());
|
target.setRepeatCount(source.getRepeatCount());
|
||||||
target.setRepeatInterval(source.getRepeatInterval());
|
target.setRepeatInterval(source.getRepeatInterval());
|
||||||
target.setMisfireInstruction(source.getMisfireInstruction());
|
target.setMisfireInstruction(source.getMisfireInstruction());
|
||||||
|
target.setJobDataMap(source.getJobDataMap());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ package it.fabioformosa.quartzmanager.api.dto;
|
|||||||
import it.fabioformosa.quartzmanager.api.validators.ValidTriggerRepetition;
|
import it.fabioformosa.quartzmanager.api.validators.ValidTriggerRepetition;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import javax.validation.constraints.Positive;
|
import javax.validation.constraints.Positive;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@ValidTriggerRepetition
|
@ValidTriggerRepetition
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@@ -18,4 +19,7 @@ public class SimpleTriggerInputDTO extends TriggerCommandDTO implements TriggerR
|
|||||||
|
|
||||||
@Positive
|
@Positive
|
||||||
private Long repeatInterval;
|
private Long repeatInterval;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Map<String, ?> jobDataMap;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
import org.quartz.JobDataMap;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
@@ -23,4 +24,5 @@ public class TriggerDTO {
|
|||||||
private JobKeyDTO jobKeyDTO;
|
private JobKeyDTO jobKeyDTO;
|
||||||
private JobDetailDTO jobDetailDTO;
|
private JobDetailDTO jobDetailDTO;
|
||||||
private boolean mayFireAgain;
|
private boolean mayFireAgain;
|
||||||
|
private JobDataMap jobDataMap;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public class WebSocketLogsNotifier implements WebhookSender<LogRecord> {
|
|||||||
private SimpMessageSendingOperations messagingTemplate;
|
private SimpMessageSendingOperations messagingTemplate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void send(LogRecord logRecord) {
|
public void send(LogRecord logRecord) {
|
||||||
messagingTemplate.convertAndSend(TOPIC_LOGS, logRecord);
|
messagingTemplate.convertAndSend(TOPIC_LOGS, logRecord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ import org.springframework.test.web.servlet.MockMvc;
|
|||||||
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
import static java.util.Map.entry;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||||
|
|
||||||
@@ -68,6 +69,10 @@ class SimpleTriggerControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SimpleTriggerInputDTO buildACompleteSimpleTriggerCommandDTO() {
|
private SimpleTriggerInputDTO buildACompleteSimpleTriggerCommandDTO() {
|
||||||
|
Map<String, ?> triggerJobDataMap = Map.ofEntries(
|
||||||
|
entry("customTriggerData1", "value1"),
|
||||||
|
entry("customTriggerData2", "value2")
|
||||||
|
);
|
||||||
return SimpleTriggerInputDTO.builder()
|
return SimpleTriggerInputDTO.builder()
|
||||||
.jobClass("it.fabioformosa.quartzmanager.api.jobs.SampleJob")
|
.jobClass("it.fabioformosa.quartzmanager.api.jobs.SampleJob")
|
||||||
.startDate(new Date())
|
.startDate(new Date())
|
||||||
@@ -75,6 +80,7 @@ class SimpleTriggerControllerTest {
|
|||||||
.misfireInstruction(MisfireInstruction.MISFIRE_INSTRUCTION_FIRE_NOW)
|
.misfireInstruction(MisfireInstruction.MISFIRE_INSTRUCTION_FIRE_NOW)
|
||||||
.repeatCount(5)
|
.repeatCount(5)
|
||||||
.repeatInterval(1000L * 60 * 60)
|
.repeatInterval(1000L * 60 * 60)
|
||||||
|
.jobDataMap(triggerJobDataMap)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,23 @@ package it.fabioformosa.quartzmanager.api.controllers.utils;
|
|||||||
|
|
||||||
import it.fabioformosa.quartzmanager.api.common.utils.DateUtils;
|
import it.fabioformosa.quartzmanager.api.common.utils.DateUtils;
|
||||||
import it.fabioformosa.quartzmanager.api.dto.*;
|
import it.fabioformosa.quartzmanager.api.dto.*;
|
||||||
|
import org.quartz.JobDataMap;
|
||||||
|
import org.quartz.SimpleScheduleBuilder;
|
||||||
|
import org.quartz.SimpleTrigger;
|
||||||
|
import org.quartz.Trigger;
|
||||||
|
import org.quartz.TriggerBuilder;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static java.util.Map.entry;
|
||||||
|
|
||||||
public class TriggerUtils {
|
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.addHoursToNow(2L))
|
.endTime(DateUtils.addHoursToNow(2L))
|
||||||
@@ -28,7 +39,7 @@ public class TriggerUtils {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
static public SimpleTriggerDTO getSimpleTriggerInstance(String triggerName, SimpleTriggerInputDTO simpleTriggerInputDTO){
|
static public SimpleTriggerDTO getSimpleTriggerInstance(String triggerName, SimpleTriggerInputDTO simpleTriggerInputDTO) {
|
||||||
return SimpleTriggerDTO.builder()
|
return SimpleTriggerDTO.builder()
|
||||||
.description("simple trigger")
|
.description("simple trigger")
|
||||||
.repeatCount(simpleTriggerInputDTO.getRepeatCount())
|
.repeatCount(simpleTriggerInputDTO.getRepeatCount())
|
||||||
@@ -48,10 +59,11 @@ public class TriggerUtils {
|
|||||||
.nextFireTime(DateUtils.addHoursToNow(1L))
|
.nextFireTime(DateUtils.addHoursToNow(1L))
|
||||||
.priority(1)
|
.priority(1)
|
||||||
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
||||||
|
.jobDataMap(new JobDataMap(simpleTriggerInputDTO.getJobDataMap()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
static public SimpleTriggerDTO getSimpleTriggerInstance(String triggerName){
|
static public SimpleTriggerDTO getSimpleTriggerInstance(String triggerName) {
|
||||||
return SimpleTriggerDTO.builder()
|
return SimpleTriggerDTO.builder()
|
||||||
.description("simple trigger")
|
.description("simple trigger")
|
||||||
.repeatCount(2)
|
.repeatCount(2)
|
||||||
@@ -71,6 +83,44 @@ public class TriggerUtils {
|
|||||||
.nextFireTime(DateUtils.addHoursToNow(1L))
|
.nextFireTime(DateUtils.addHoursToNow(1L))
|
||||||
.priority(1)
|
.priority(1)
|
||||||
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
.startTime(DateUtils.fromLocalDateTimeToDate(LocalDateTime.now()))
|
||||||
|
.jobDataMap(new JobDataMap(Map.ofEntries(entry("customTriggerData1", "value1"))))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
static public SimpleTrigger buildSimpleTrigger() {
|
||||||
|
TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
|
||||||
|
triggerTriggerBuilder.startAt(new Date());
|
||||||
|
triggerTriggerBuilder.endAt(DateUtils.addHoursToNow(1));
|
||||||
|
triggerTriggerBuilder.usingJobData(new JobDataMap(Map.ofEntries(entry("data", "value"))));
|
||||||
|
|
||||||
|
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
|
||||||
|
scheduleBuilder.withIntervalInMilliseconds(1000);
|
||||||
|
scheduleBuilder.withRepeatCount(1);
|
||||||
|
scheduleBuilder.withMisfireHandlingInstructionFireNow();
|
||||||
|
|
||||||
|
return triggerTriggerBuilder.withSchedule(
|
||||||
|
scheduleBuilder
|
||||||
|
)
|
||||||
|
.withIdentity("simpleTrigger").build();
|
||||||
|
}
|
||||||
|
|
||||||
|
static public SimpleTriggerCommandDTO buildSimpleTriggerCommandDTO(String triggerName) throws ParseException {
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Date startDate = dateFormat.parse("2024-02-02");
|
||||||
|
Date endDate = dateFormat.parse("2024-03-02");
|
||||||
|
|
||||||
|
SimpleTriggerInputDTO triggerInputDTO = SimpleTriggerInputDTO.builder()
|
||||||
|
.misfireInstruction(MisfireInstruction.MISFIRE_INSTRUCTION_FIRE_NOW)
|
||||||
|
.jobClass("sample.jobClass")
|
||||||
|
.repeatCount(1)
|
||||||
|
.repeatInterval(1000L)
|
||||||
|
.startDate(startDate)
|
||||||
|
.endDate(endDate)
|
||||||
|
.jobDataMap(Map.ofEntries(entry("data", "value")))
|
||||||
|
.build();
|
||||||
|
return SimpleTriggerCommandDTO.builder()
|
||||||
|
.triggerName(triggerName)
|
||||||
|
.simpleTriggerInputDTO(triggerInputDTO)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package it.fabioformosa.quartzmanager.api.converters;
|
||||||
|
|
||||||
|
import it.fabioformosa.quartzmanager.api.controllers.utils.TriggerUtils;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerCommandDTO;
|
||||||
|
import org.assertj.core.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer;
|
||||||
|
import org.junit.jupiter.api.Order;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestMethodOrder;
|
||||||
|
import org.quartz.SimpleTrigger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.core.convert.ConversionService;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||||
|
@SpringBootTest
|
||||||
|
class SimpleTriggerCommandDTOToSimpleTriggerTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConversionService conversionService;
|
||||||
|
|
||||||
|
@Order(1)
|
||||||
|
@Test
|
||||||
|
void givenSimpleTriggerCommandDTO_whenItIsConverted_thenASimpleTriggerIsReturned() throws ParseException {
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Date startDate = dateFormat.parse("2024-02-02");
|
||||||
|
Date endDate = dateFormat.parse("2024-03-02");
|
||||||
|
SimpleTriggerCommandDTO simpleTriggerCommandDTO = TriggerUtils.buildSimpleTriggerCommandDTO("mytrigger");
|
||||||
|
SimpleTrigger simpleTrigger = conversionService.convert(simpleTriggerCommandDTO, SimpleTrigger.class);
|
||||||
|
Assertions.assertThat(simpleTrigger).isNotNull();
|
||||||
|
Assertions.assertThat(simpleTrigger.getRepeatCount()).isEqualTo(simpleTriggerCommandDTO.getSimpleTriggerInputDTO().getRepeatCount());
|
||||||
|
Assertions.assertThat(simpleTrigger.getRepeatInterval()).isEqualTo(simpleTriggerCommandDTO.getSimpleTriggerInputDTO().getRepeatInterval());
|
||||||
|
Assertions.assertThat(simpleTrigger.getJobDataMap()).containsEntry("data", "value");
|
||||||
|
Assertions.assertThat(simpleTrigger.getStartTime()).isEqualTo(startDate);
|
||||||
|
Assertions.assertThat(simpleTrigger.getEndTime()).isEqualTo(endDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package it.fabioformosa.quartzmanager.api.converters;
|
||||||
|
|
||||||
|
import it.fabioformosa.quartzmanager.api.controllers.utils.TriggerUtils;
|
||||||
|
import it.fabioformosa.quartzmanager.api.dto.SimpleTriggerDTO;
|
||||||
|
import org.assertj.core.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.MethodOrderer;
|
||||||
|
import org.junit.jupiter.api.Order;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestMethodOrder;
|
||||||
|
import org.quartz.SimpleTrigger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.core.convert.ConversionService;
|
||||||
|
|
||||||
|
|
||||||
|
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||||
|
@SpringBootTest
|
||||||
|
class SimpleTriggerToSimpleTriggerDTOTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ConversionService conversionService;
|
||||||
|
|
||||||
|
@Order(1)
|
||||||
|
@Test
|
||||||
|
void givenSimpleTrigger_whenItIsConverted_thenADtoIsReturned() {
|
||||||
|
SimpleTrigger simpleTrigger = TriggerUtils.buildSimpleTrigger();
|
||||||
|
SimpleTriggerDTO simpleTriggerDTO = conversionService.convert(simpleTrigger, SimpleTriggerDTO.class);
|
||||||
|
Assertions.assertThat(simpleTriggerDTO).isNotNull();
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatCount()).isEqualTo(simpleTrigger.getRepeatCount());
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getRepeatInterval()).isEqualTo(simpleTrigger.getRepeatInterval());
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getJobDataMap()).containsEntry("data", "value");
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getStartTime()).isEqualTo(simpleTrigger.getStartTime());
|
||||||
|
Assertions.assertThat(simpleTriggerDTO.getEndTime()).isEqualTo(simpleTrigger.getEndTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>quartz-manager-starter-persistence</artifactId>
|
<artifactId>quartz-manager-starter-persistence</artifactId>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import org.springframework.context.annotation.*;
|
|||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@PropertySource("classpath:quartz-persistence.properties")
|
|
||||||
public class PersistenceConfig {
|
public class PersistenceConfig {
|
||||||
|
|
||||||
@Value("${quartz-manager.persistence.quartz.datasource.url}")
|
@Value("${quartz-manager.persistence.quartz.datasource.url}")
|
||||||
@@ -57,7 +56,7 @@ public class PersistenceConfig {
|
|||||||
|
|
||||||
@Primary
|
@Primary
|
||||||
@Bean
|
@Bean
|
||||||
public DataSource quartzManagerDatasource(PersistenceDatasourceProps persistenceDatasourceProps) {
|
public DataSource quartzManagerDatasource() {
|
||||||
return DataSourceBuilder.create()
|
return DataSourceBuilder.create()
|
||||||
.url(quartzDatasourceUrl)
|
.url(quartzDatasourceUrl)
|
||||||
.driverClassName("org.postgresql.Driver")
|
.driverClassName("org.postgresql.Driver")
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
|
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
|
||||||
|
|
||||||
<includeAll path="./migrations" relativeToChangelogFile="true"/>
|
<includeAll path="classpath:db/quartz-scheduler/migrations" relativeToChangelogFile="false" errorIfMissingOrEmpty="true"/>
|
||||||
|
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>quartz-manager-starter-security</artifactId>
|
<artifactId>quartz-manager-starter-security</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>quartz-manager-starter-ui</artifactId>
|
<artifactId>quartz-manager-starter-ui</artifactId>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>it.fabioformosa.quartz-manager</groupId>
|
<groupId>it.fabioformosa.quartz-manager</groupId>
|
||||||
<artifactId>quartz-manager-parent</artifactId>
|
<artifactId>quartz-manager-parent</artifactId>
|
||||||
<version>4.0.8</version>
|
<version>4.0.9</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>quartz-manager-web-showcase</artifactId>
|
<artifactId>quartz-manager-web-showcase</artifactId>
|
||||||
|
|||||||
Reference in New Issue
Block a user