Skip to content

Commit

Permalink
feat($Quartz): delete job by scheduler
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnymillergh committed Oct 1, 2021
1 parent bb2ae84 commit 630cc62
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.common.bean.ResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.poi.AbstractExcelDataController;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.CreateOrModifyQuartzJobConfigurationPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.service.QuartzJobConfigurationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
Expand Down Expand Up @@ -42,15 +45,15 @@ public PageResponseBodyBean<GetQuartzJobConfigurationPageListItem> getPageList(

@PostMapping("/quartz-job-configurations")
@ApiOperation(value = "Create Quartz job configuration", notes = "Create Quartz job configuration")
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> create(
public ResponseBodyBean<Long> create(
@Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
) {
return ResponseBodyBean.ofSuccess(this.service.create(payload));
}

@PutMapping("/quartz-job-configurations/{id}")
@ApiOperation(value = "Modify Quartz job configuration", notes = "Modify Quartz job configuration")
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> modify(
public ResponseBodyBean<Long> modify(
@PathVariable Long id,
@Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
) {
Expand All @@ -59,7 +62,7 @@ public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> modify(

@PatchMapping("/quartz-job-configurations/{id}/{property}")
@ApiOperation(value = "Patch Quartz job configuration", notes = "Patch Quartz job configuration")
public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> patch(
public ResponseBodyBean<Long> patch(
@PathVariable Long id,
@PathVariable String property,
@RequestBody CreateOrModifyQuartzJobConfigurationPayload payload
Expand All @@ -69,10 +72,16 @@ public ResponseBodyBean<CreateOrModifyQuartzJobConfigurationResponse> patch(

@PostMapping("/quartz-job-configurations/{id}/run-immediately")
@ApiOperation(value = "Run Quartz job immediately", notes = "Run Quartz job immediately")
public ResponseBodyBean<RunImmediatelyResponse> runImmediately(@PathVariable Long id) {
public ResponseBodyBean<Long> runImmediately(@PathVariable Long id) {
return ResponseBodyBean.ofSuccess(this.service.runImmediately(id));
}

@DeleteMapping("/quartz-job-configurations/{id}/{group}")
@ApiOperation(value = "Delete Quartz job configuration", notes = "Delete Quartz job configuration")
public ResponseBodyBean<Long> delete(@PathVariable Long id, @PathVariable String group) {
return ResponseBodyBean.ofSuccess(this.service.delete(id, group));
}

@Override
protected void onExceptionOccurred() {
log.error("Exception occurred when uploading excel. Excel class: {}", QuartzJobConfigurationExcel.class);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.baomidou.mybatisplus.extension.service.IService;
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.CreateOrModifyQuartzJobConfigurationPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.persistence.QuartzJobConfiguration;
import org.springframework.validation.annotation.Validated;

Expand Down Expand Up @@ -59,30 +62,30 @@ void validateBeforeAddToBeanList(List<QuartzJobConfigurationExcel> beanList, Qua
* Create create quartz job configuration response.
*
* @param payload the payload
* @return the create quartz job configuration response
* @return the quartz job configuration id
*/
CreateOrModifyQuartzJobConfigurationResponse create(@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);
Long create(@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);

/**
* Modify modify quartz job configuration response.
*
* @param id the id
* @param payload the payload
* @return the modify quartz job configuration response
* @return the quartz job configuration id
*/
CreateOrModifyQuartzJobConfigurationResponse modify(
Long modify(
@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload);

/**
* Patch create or modify quartz job configuration response.
*
* @param id the id
* @param property
* @param property the property
* @param payload the payload
* @return the create or modify quartz job configuration response
* @return the quartz job configuration id
*/
CreateOrModifyQuartzJobConfigurationResponse patch(
Long patch(
@NotNull Long id,
@NotBlank String property,
@NotNull CreateOrModifyQuartzJobConfigurationPayload payload);
Expand All @@ -91,7 +94,16 @@ CreateOrModifyQuartzJobConfigurationResponse patch(
* Run immediately.
*
* @param id the id
* @return the run immediately response
* @return the quartz job configuration id
*/
RunImmediatelyResponse runImmediately(@NotNull Long id);
Long runImmediately(@NotNull Long id);

/**
* Delete quartz job long.
*
* @param id the id
* @param group the group
* @return the long
*/
Long delete(@NotNull Long id, @NotBlank String group);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jmsoftware.maf.common.bean.PageResponseBodyBean;
import com.jmsoftware.maf.springcloudstarter.configuration.MafProjectProperty;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.*;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.CreateOrModifyQuartzJobConfigurationPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListItem;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.GetQuartzJobConfigurationPageListPayload;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.QuartzJobConfigurationExcel;
import com.jmsoftware.maf.springcloudstarter.quartz.entity.persistence.QuartzJobConfiguration;
import com.jmsoftware.maf.springcloudstarter.quartz.mapper.QuartzJobConfigurationMapper;
import com.jmsoftware.maf.springcloudstarter.quartz.service.QuartzJobConfigurationService;
Expand Down Expand Up @@ -117,15 +120,15 @@ public List<QuartzJobConfigurationExcel> getListForExporting() {

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse create(
public Long create(
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload
) {
this.validateCronExpression(payload.getCronExpression());
val quartzJobConfiguration = payload.asQuartzJobConfiguration();
quartzJobConfiguration.setServiceName(this.mafProjectProperty.getProjectArtifactId());
requireTrue(this.save(quartzJobConfiguration), saved -> log.info("Quartz job configuration saved: {}", saved))
.orElseThrow(() -> new IllegalStateException("Failed to save quartz job configuration"));
return new CreateOrModifyQuartzJobConfigurationResponse(quartzJobConfiguration.getId());
return quartzJobConfiguration.getId();
}

private void validateCronExpression(String cronExpression) throws Throwable {
Expand All @@ -137,7 +140,7 @@ private void validateCronExpression(String cronExpression) throws Throwable {

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse modify(
public Long modify(
@NotNull Long id,
@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload
) {
Expand All @@ -148,12 +151,12 @@ public CreateOrModifyQuartzJobConfigurationResponse modify(
this.updateById(quartzJobConfiguration),
updated -> log.warn("Quartz job configuration updated: {}", updated)
).orElseThrow(() -> new IllegalStateException("Failed to update quartz job configuration"));
return new CreateOrModifyQuartzJobConfigurationResponse(id);
return id;
}

@Override
@SneakyThrows
public CreateOrModifyQuartzJobConfigurationResponse patch(
public Long patch(
@NotNull Long id,
@NotBlank String property,
@NotNull CreateOrModifyQuartzJobConfigurationPayload payload
Expand All @@ -163,21 +166,21 @@ public CreateOrModifyQuartzJobConfigurationResponse patch(
val validationResult = ValidationUtil.warpValidateProperty(payload, property);
requireTrue(
validationResult.isSuccess(),
valid -> log.warn("Quartz job configuration updated: {}", valid)
valid -> log.warn("Quartz job configuration patched: {}", valid)
).orElseThrow(() -> new IllegalStateException(format("{} invalid", property)));
val quartzJobConfiguration = new QuartzJobConfiguration();
ReflectUtil.setFieldValue(quartzJobConfiguration, property, value);
quartzJobConfiguration.setId(id);
requireTrue(
this.updateById(quartzJobConfiguration),
updated -> log.warn("Quartz job configuration updated: {}", updated)
updated -> log.warn("Quartz job configuration patched: {}", updated)
).orElseThrow(() -> new IllegalStateException(format("Failed to patch {}", property)));
return new CreateOrModifyQuartzJobConfigurationResponse(id);
return id;
}

@Override
@SneakyThrows
public RunImmediatelyResponse runImmediately(@NotNull Long id) {
public Long runImmediately(@NotNull Long id) {
val quartzJobConfiguration = this.getById(id);
requireNonNull(quartzJobConfiguration, format("Quartz job(id:{}) must not be null", id));
val scheduler = this.schedulerFactoryBean.getScheduler();
Expand All @@ -191,6 +194,25 @@ public RunImmediatelyResponse runImmediately(@NotNull Long id) {
jobDataMap
);
log.warn("Triggered Quartz job successfully, {}", quartzJobConfiguration);
return new RunImmediatelyResponse(id);
return id;
}

@Override
@SneakyThrows
@Transactional(rollbackFor = Throwable.class)
public Long delete(@NotNull Long id, @NotBlank String group) {
requireTrue(
this.removeById(id),
deleted -> log.warn("Quartz job configuration deleted: {}", deleted)
).orElseThrow(() -> new IllegalStateException(format("Failed to delete Quartz job configuration")));
val scheduler = this.schedulerFactoryBean.getScheduler();
val deletedJob = scheduler.deleteJob(
ScheduleUtil.getJobKey(id, group, this.mafProjectProperty.getProjectArtifactId())
);
requireTrue(
deletedJob,
deletedJob1 -> log.warn("Scheduler deleted job and related triggers: {}", deletedJob1)
).orElseThrow(() -> new IllegalStateException("Failed to delete job by scheduler"));
return id;
}
}

0 comments on commit 630cc62

Please sign in to comment.