Cron monitoring for Java services

One annotation. Then you know.

Marsolen reads the schedule off your @Scheduled method, so it already knows when the next run is due. If the ping does not arrive, the team that owns the job hears about it.

Free for 5 monitors · no credit card · Boot 3.5 and 4.1

ReportJob.java
@Componentclass ReportJob {   @Scheduled(cron = "0 0 3 * * *", zone = "Europe/Paris")  @MonitoredSchedule("nightly-report")  void generateNightly() {    reports.nightly();  }}
nightly-report Down 42m
44 runs expected 03:00 Europe/Paris
Ingest budget · p99 50ms
Overdue sweep 30s
Ping timeout in your JVM 2s, non-blocking
Dependencies added 0transitive

Two lines in the job you already have

Add the starter once per service. Every annotated method registers itself when your service starts, with its cron expression and zone already known.

ReportJob.java
1@Component2class ReportJob {3 4  @Scheduled(cron = "0 0 3 * * *", zone = "Europe/Paris")5  @MonitoredSchedule("nightly-report")6  void generateNightly() {7    reports.nightly();8  }9}
ReportQuartzJob.java
1public class ReportQuartzJob implements Job {2 3  @Override4  @MonitoredSchedule("nightly-report")5  public void execute(JobExecutionContext ctx) {6    reports.nightly();7  }8}
pom.xml
1<dependency>2  <groupId>io.marsolen</groupId>3  <artifactId>marsolen-spring-boot-starter</artifactId>4  <version>0.1.0</version>5</dependency>
application.properties
1marsolen.enabled=true2marsolen.base-url=https://marsolen.com3marsolen.timeout=2s
Spring Boot 3.5 and 4.1
Java 17 and up
Quartz and plain cron
Never blocks your job

Three places to be told

Email

Verified addresses only, so an alert cannot land in a mailbox nobody reads.

Webhook

JSON on state change, retried with backoff. Private address ranges are refused.

Slack

One incoming webhook per channel. Down, and again on recovery. Nothing else.

Priced per monitor

Free

$0

Your own jobs, one service.

  • 5 monitors
  • Email alerts
  • 7-day ping history

Scale

$49/ month

Many services, one bill.

  • 250 monitors
  • 1-year ping history
  • Per-monitor webhook targets