Skip to content

Commit

Permalink
#14 cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
fabioformosa committed Oct 30, 2021
1 parent 87ee4be commit fb2d8da
Show file tree
Hide file tree
Showing 10 changed files with 171 additions and 262 deletions.
74 changes: 37 additions & 37 deletions quartz-manager-parent/quartz-manager-starter-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,45 +91,45 @@
<version>1.3.2</version>
</dependency>

<!-- Reactor -->
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-net</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>io.projectreactor.spring</groupId>
<artifactId>reactor-spring-context</artifactId>
<version>2.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<!-- Reactor -->
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-net</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>io.projectreactor.spring</groupId>
<artifactId>reactor-spring-context</artifactId>
<version>2.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>

<!-- SWAGGER -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox.version}</version>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import it.fabioformosa.quartzmanager.common.properties.QuartzModuleProperties;
import it.fabioformosa.quartzmanager.scheduler.AutowiringSpringBeanJobFactory;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.SimpleTrigger;
import org.quartz.spi.JobFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -17,7 +15,6 @@
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

import java.io.IOException;
import java.util.Properties;
Expand All @@ -27,44 +24,20 @@
@ConditionalOnProperty(name = "quartz.enabled")
public class SchedulerConfig {

private static final int DEFAULT_MISFIRE_INSTRUCTION = SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT;

private static JobDetailFactoryBean createJobDetail(Class<? extends Job> jobClass) {
JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
factoryBean.setJobClass(jobClass);
factoryBean.setDurability(false);
return factoryBean;
}

private static SimpleTriggerFactoryBean createTrigger(JobDetail jobDetail, long pollFrequencyMs,
int repeatCount) {
SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
factoryBean.setJobDetail(jobDetail);
factoryBean.setStartDelay(3000L);
factoryBean.setRepeatInterval(pollFrequencyMs);
factoryBean.setRepeatCount(repeatCount);
factoryBean
.setMisfireInstruction(DEFAULT_MISFIRE_INSTRUCTION);// in case of misfire, ignore all missed triggers and continue
return factoryBean;
}

@Value("${quartz-manager.jobClass}")
private String jobClassname;

@Autowired(required = false)
private QuartzModuleProperties quartzModuleProperties;


// REMOVEME
// @Bean(name = "triggerMonitor")
// public TriggerMonitor createTriggerMonitor(@Qualifier("jobTrigger") Trigger trigger) {
// TriggerMonitor triggerMonitor = new TriggerMonitorImpl();
// triggerMonitor.setTrigger(trigger);
// return triggerMonitor;
// }

@Bean
@SuppressWarnings("unchecked")
public JobDetailFactoryBean jobDetail() throws ClassNotFoundException {
Class<? extends Job> JobClass = (Class<? extends Job>) Class.forName(jobClassname);
return createJobDetail(JobClass);
Expand All @@ -85,24 +58,15 @@ public Properties quartzProperties() throws IOException {
return propertiesFactoryBean.getObject();
}

// @Bean(name = "jobTrigger")
// public SimpleTriggerFactoryBean sampleJobTrigger(@Qualifier("jobDetail") JobDetail jobDetail,
// @Value("${job.frequency}") long frequency, @Value("${job.repeatCount}") int repeatCount) {
// return createTrigger(jobDetail, frequency, repeatCount);
// }

@Bean(name = "scheduler")
public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) throws IOException {
// public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory,
// @Qualifier("jobTrigger") Trigger sampleJobTrigger) throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setJobFactory(jobFactory);
Properties mergedProperties = new Properties();
mergedProperties.putAll(quartzProperties());
if(quartzModuleProperties != null)
mergedProperties.putAll(quartzModuleProperties.getProperties());
mergedProperties.putAll(quartzProperties());
factory.setQuartzProperties(mergedProperties);
//factory.setTriggers(sampleJobTrigger);
factory.setAutoStartup(false);
return factory;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,24 +38,15 @@ public SchedulerController(SchedulerService schedulerService, ConversionService
this.conversionService = conversionService;
}

// @Resource
// private Scheduler scheduler;

//TODO REMOVEME
// @Resource
// private TriggerMonitor triggerMonitor;

@Resource
private ConversionService conversionService;

@GetMapping("/config")
public SchedulerConfigParam getConfig() throws SchedulerException {
log.debug("SCHEDULER - GET CONFIG params");

SchedulerConfigParam schedulerConfigParam = schedulerService.getOneSimpleTrigger()
.map(SchedulerController::fromSimpleTriggerToSchedulerConfigParam)
.orElse(new SchedulerConfigParam(0, 0, 0));

return schedulerConfigParam;
}

Expand All @@ -66,8 +57,6 @@ public static SchedulerConfigParam fromSimpleTriggerToSchedulerConfigParam(Simpl
return new SchedulerConfigParam(triggersPerDay, maxCount, timesTriggered);
}



@GetMapping
public SchedulerDTO getScheduler() {
log.debug("SCHEDULER - GET Scheduler...");
Expand Down Expand Up @@ -114,26 +103,6 @@ public void pause() throws SchedulerException {
schedulerService.getScheduler().standby();
}

// @PostMapping("/config")
// public SchedulerConfigParam postConfig(@RequestBody SchedulerConfigParam config) throws SchedulerException {
// log.info("SCHEDULER - NEW CONFIG {}", config);
//
// int intervalInMills = SchedulerService.fromTriggerPerDayToMillsInterval(config.getTriggerPerDay());
//
// Trigger newTrigger = TriggerBuilder.newTrigger()
// .withSchedule(
// SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInMilliseconds(intervalInMills)
// .withRepeatCount(config.getMaxCount() - 1)
// .withMisfireHandlingInstructionNextWithRemainingCount()
// )
// .build();
//
// schedulerService.getScheduler().rescheduleJob(schedulerService.getOneTriggerKey().get(), newTrigger);
//// triggerMonitor.setTrigger(newTrigger); REMOVEME
// return config;
// }

@GetMapping("/resume")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void resume() throws SchedulerException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@
import it.fabioformosa.quartzmanager.dto.TriggerDTO;
import it.fabioformosa.quartzmanager.services.SchedulerService;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.convert.ConversionService;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@Slf4j
@RequestMapping("/quartz-manager/triggers")
@RestController
Expand All @@ -21,83 +18,31 @@ public class TriggerController {
@Value("${quartz-manager.jobClass}")
private String jobClassname;

private Scheduler scheduler;
private SchedulerService schedulerService;
private ConversionService conversionService;

public TriggerController(Scheduler scheduler, SchedulerService schedulerService, ConversionService conversionService) {
this.scheduler = scheduler;
public TriggerController(SchedulerService schedulerService) {
this.schedulerService = schedulerService;
this.conversionService = conversionService;
}

@GetMapping("/{name}")
public TriggerDTO getTrigger(@PathVariable String name) throws SchedulerException {
Trigger trigger = scheduler.getTrigger(new TriggerKey(name));
TriggerDTO triggerDTO = conversionService.convert(trigger, TriggerDTO.class);
return triggerDTO;
return schedulerService.getTriggerByName(name);
}

@PostMapping("/{name}")
public TriggerDTO postTrigger(@PathVariable String name, @RequestBody SchedulerConfigParam config) throws SchedulerException, ClassNotFoundException {
log.info("TRIGGER - POST trigger {}", config);
int intervalInMills = SchedulerService.fromTriggerPerDayToMillsInterval(config.getTriggerPerDay());

Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(jobClassname);
JobDetail jobDetail = JobBuilder.newJob()
.ofType(jobClass)
.storeDurably(false)
.build();

Trigger newTrigger = TriggerBuilder.newTrigger()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(intervalInMills)
.withRepeatCount(config.getMaxCount() - 1)
.withMisfireHandlingInstructionNextWithRemainingCount()
)
.withIdentity(name)
.build();

// Optional<TriggerKey> optionalTriggerKey = schedulerService.getTriggerByKey(name);
// TriggerKey triggerKey = optionalTriggerKey.orElse(TriggerKey.triggerKey(name));

scheduler.scheduleJob(jobDetail, newTrigger);
// scheduler.rescheduleJob(triggerKey, newTrigger);

TriggerDTO newTriggerDTO = conversionService.convert(newTrigger, TriggerDTO.class);

log.info("Rescheduled new trigger {}", newTriggerDTO);
log.info("TRIGGER - CREATING a trigger {} {}", name, config);
TriggerDTO newTriggerDTO = schedulerService.scheduleNewTrigger(name, jobClassname, config);
log.info("TRIGGER - CREATED a trigger {}", newTriggerDTO);
return newTriggerDTO;
}

@PutMapping("/{name}")
public TriggerDTO rescheduleTrigger(@PathVariable String name, @RequestBody SchedulerConfigParam config) throws SchedulerException, ClassNotFoundException {
log.info("TRIGGER - RESCHEDULE trigger {}", config);
int intervalInMills = SchedulerService.fromTriggerPerDayToMillsInterval(config.getTriggerPerDay());

Optional<TriggerKey> optionalTriggerKey = schedulerService.getTriggerByKey(name);
TriggerKey triggerKey = optionalTriggerKey.orElse(TriggerKey.triggerKey(name));
Trigger trigger = scheduler.getTrigger(triggerKey);

Trigger newTrigger = TriggerBuilder.newTrigger()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(intervalInMills)
.withRepeatCount(config.getMaxCount() - 1)
.withMisfireHandlingInstructionNextWithRemainingCount()
)
.forJob(trigger.getJobKey().getName())
.withIdentity(name)
.build();

// scheduler.scheduleJob(jobDetail, newTrigger);
scheduler.rescheduleJob(triggerKey, newTrigger);

TriggerDTO newTriggerDTO = conversionService.convert(newTrigger, TriggerDTO.class);

log.info("Rescheduled new trigger {}", newTriggerDTO);
return newTriggerDTO;
public TriggerDTO rescheduleTrigger(@PathVariable String name, @RequestBody SchedulerConfigParam config) throws SchedulerException {
log.info("TRIGGER - RESCHEDULING the trigger {} {}", name, config);
TriggerDTO triggerDTO = schedulerService.rescheduleTrigger(name, config);
log.info("TRIGGER - RESCHEDULED the trigger {}", triggerDTO);
return triggerDTO;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
@RequestMapping(value = "/quartz-manager/api", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {


@GetMapping("/whoami")
public @ResponseBody Object user() {
SecurityContext context = SecurityContextHolder.getContext();
Expand All @@ -21,12 +20,12 @@ public class UserController {
return "\"NO_AUTH\"";
}

/**
* JWT Temporary disabled
*
* @author Fabio.Formosa
*
*/
// /**
// * JWT Temporary disabled
// *
// * @author Fabio.Formosa
// *
// */

// @Autowired
// private UserService userService;
Expand Down
Loading

0 comments on commit fb2d8da

Please sign in to comment.