package de.otto.edison.example.jobs; import de.otto.edison.jobs.definition.JobDefinition; import de.otto.edison.jobs.eventbus.JobEventPublisher; import de.otto.edison.jobs.eventbus.events.StateChangeEvent; import de.otto.edison.jobs.service.JobRunnable; import org.springframework.stereotype.Component; import java.util.Optional; import java.util.Random; import static de.otto.edison.jobs.definition.DefaultJobDefinition.retryableFixedDelayJobDefinition; import static de.otto.edison.jobs.eventbus.events.StateChangeEvent.State.SKIPPED; import static java.lang.Thread.sleep; import static java.time.Duration.ofMinutes; @Component public class BarJob implements JobRunnable { @Override public JobDefinition getJobDefinition() { return retryableFixedDelayJobDefinition( "Bar", "Bar Job", "An example job that is running for a while and skip and has a long long long long long long long long long long long long long long long long long long long long description.", ofMinutes(2), 1, 3, Optional.of(ofMinutes(2)), Optional.of(ofMinutes(20)) ); } @Override public void execute(final JobEventPublisher jobEventPublisher) { if (hasNothingToDo()) { jobEventPublisher.skipped(); } else { if (hasSomeErrorCondition()) { jobEventPublisher.error("Some random error occured"); } for (int i = 0; i < 10; ++i) { doSomeHardWork(jobEventPublisher); } } } private void doSomeHardWork(final JobEventPublisher jobEventPublisher) { try { jobEventPublisher.info("Still doing some hard work..."); jobEventPublisher.skipped(); } catch (final Exception e) { jobEventPublisher.error(e.getMessage()); } } private boolean hasSomeErrorCondition() { return new Random().nextBoolean(); } private boolean hasNothingToDo() { return new Random().nextBoolean(); } }