
com.xlrit.gears.engine.schedule.PurgeService Maven / Gradle / Ivy
package com.xlrit.gears.engine.schedule;
import java.time.*;
import java.util.Date;
import java.util.List;
import com.xlrit.gears.base.schedule.ScheduledRunnable;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor;
// NOTE this can also be done using standard Flowable functionality:
// https://www.flowable.com/open-source/docs/bpmn/ch11-History#history-cleaning
@Component
@RequiredArgsConstructor
public class PurgeService extends ScheduledRunnable {
private static final Logger LOG = LoggerFactory.getLogger(PurgeService.class);
private final PurgeProperties properties;
private final RuntimeService runtimeService;
@Override
protected boolean isEnabled() {
return properties.isEnabled();
}
@Override
protected String getCronExpression() {
return properties.getCron();
}
@Override
protected void runScheduled() {
ZonedDateTime beforeDateTime = ZonedDateTime.now()
.minus(properties.getMaxAge());
List instances = runtimeService.createProcessInstanceQuery()
.startedBefore(toDate(beforeDateTime))
.list();
LOG.info("There are {} process instances older than {} (before {}):", instances.size(), properties.getMaxAge(), beforeDateTime);
for (ProcessInstance instance : instances) {
LOG.info("- {}: started {}", instance.getProcessDefinitionName(), instance.getStartTime());
if (properties.isDelete()) {
runtimeService.deleteProcessInstance(instance.getProcessInstanceId(), "Purged after " + properties.getMaxAge());
}
}
}
private Date toDate(ZonedDateTime zonedDateTime) {
return Date.from(zonedDateTime.toInstant());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy