All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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