From 87c9f617ba300840212e6aa7127746c8103d44ec Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Fri, 16 Oct 2026 18:01:42 -0700 Subject: [PATCH 1/4] docs(crons): Document monitoring all Spring @Scheduled methods Co-Authored-By: Claude --- platform-includes/crons/setup/java.spring-boot.mdx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/platform-includes/crons/setup/java.spring-boot.mdx b/platform-includes/crons/setup/java.spring-boot.mdx index 365f6373df8b1..db592d9b7a0f9 100644 --- a/platform-includes/crons/setup/java.spring-boot.mdx +++ b/platform-includes/crons/setup/java.spring-boot.mdx @@ -76,6 +76,20 @@ Sentry only updates the fields that were sent. Margins, max runtime, and thresho When you upgrade, monitors that already exist get the schedule and timezone from `@Scheduled` (the JVM's default time zone if `zone` isn't set), overwriting the ones set in Sentry. To keep managing a monitor's schedule in Sentry, set `@SentryCheckIn(value = "", upsertMonitorConfig = false)`. +### Monitor All `@Scheduled` Methods + +From the next Sentry Java SDK release (after `8.60.0`), you can monitor every `@Scheduled` method without adding `@SentryCheckIn` to each one: + +```properties {filename:application.properties} +sentry.monitor-scheduled-tasks=true +# Optional: methods to skip, as ClassName.methodName or a regular expression +sentry.exclude-scheduled-tasks=ReportJobs.sendDailyReport,Internal.* +``` + +Each method gets a monitor slug built from its class and method name, for example `report-jobs-send-daily-report` for `ReportJobs.sendDailyReport`. Nested classes include the outer class name (`Outer.Inner.method`), and slugs longer than 50 characters are shortened with a hash suffix. The schedule is sent as described above. Methods with schedules that can't be expressed in the Crons schedule format (for example, a `fixedDelay` job) still send check-ins, but without a monitor configuration, so create those monitors in Sentry first. + +Methods annotated with `@SentryCheckIn` keep their own slug and settings. Methods on `final` classes and `final` methods can't be monitored this way. + ## Heartbeat Heartbeat monitoring notifies Sentry of a job's status through one check-in. This setup will only notify you if your job didn't start when expected (missed). If you need to track a job to see if it exceeded its maximum runtime (failed), use check-ins instead. To start sending heartbeats simply add the `@SentryCheckIn(monitorSlug = "", heartbeat = true)` annotation to the method you want to send heartbeats for. From b6131a7f895766c22d649c6db2880ff87335dee4 Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Mon, 19 Oct 2026 17:50:16 -0700 Subject: [PATCH 2/4] docs(crons): Recommend monitoring all Spring @Scheduled methods first Co-Authored-By: Claude --- .../crons/setup/java.spring-boot.mdx | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/platform-includes/crons/setup/java.spring-boot.mdx b/platform-includes/crons/setup/java.spring-boot.mdx index db592d9b7a0f9..57c5d20fa19db 100644 --- a/platform-includes/crons/setup/java.spring-boot.mdx +++ b/platform-includes/crons/setup/java.spring-boot.mdx @@ -8,7 +8,25 @@ The `@SentryCheckIn` annotation requires `org.aspectj:aspectjweaver` to be prese ## Check-Ins (Recommended) -Check-in monitoring allows you to track a job's progress by completing two check-ins: one at the start of your job and another at the end of your job. This two-step process allows Sentry to notify you if your job didn't start when expected (missed) or if it exceeded its maximum runtime (failed). To start sending check-ins simply add the `@SentryCheckIn("")` annotation to the method you want to send check-ins for. +Check-in monitoring allows you to track a job's progress by completing two check-ins: one at the start of your job and another at the end of your job. This two-step process allows Sentry to notify you if your job didn't start when expected (missed) or if it exceeded its maximum runtime (failed). + +### Monitor All `@Scheduled` Methods + +We recommend monitoring every `@Scheduled` method. From the next Sentry Java SDK release (after `8.60.0`), you can do this without adding `@SentryCheckIn` to each one: + +```properties {filename:application.properties} +sentry.monitor-scheduled-tasks=true +# Optional: methods to skip, as ClassName.methodName or a regular expression +sentry.exclude-scheduled-tasks=ReportJobs.sendDailyReport,Internal.* +``` + +Each method gets a monitor slug built from its class and method name, for example `report-jobs-send-daily-report` for `ReportJobs.sendDailyReport`. Nested classes include the outer class name (`Outer.Inner.method`), and slugs longer than 50 characters are shortened with a hash suffix. The schedule is sent as described in [Monitor Configuration From `@Scheduled`](#monitor-configuration-from-scheduled). Methods with schedules that can't be expressed in the Crons schedule format (for example, a `fixedDelay` job) still send check-ins, but without a monitor configuration, so create those monitors in Sentry first. + +Methods annotated with `@SentryCheckIn` keep their own slug and settings. Methods on `final` classes and `final` methods can't be monitored this way. + +### Monitor Specific Methods + +To send check-ins for specific methods, add the `@SentryCheckIn("")` annotation to the method you want to send check-ins for. ```java {tabTitle:Java (Spring Boot 3)} {mdExpandTabs} import io.sentry.spring.jakarta.checkin.SentryCheckIn; @@ -52,6 +70,8 @@ public class CustomJob { } ``` +With `sentry.monitor-scheduled-tasks` on, a method with `@SentryCheckIn` is checked in once per run, using the annotation's slug and settings. + ### Monitor Configuration From `@Scheduled` From the next Sentry Java SDK release (after `8.60.0`), `@SentryCheckIn` reads the method's `@Scheduled` annotation and sends a monitor configuration with the in-progress check-in by default, so Sentry creates the monitor, or updates its schedule, from your code: @@ -76,20 +96,6 @@ Sentry only updates the fields that were sent. Margins, max runtime, and thresho When you upgrade, monitors that already exist get the schedule and timezone from `@Scheduled` (the JVM's default time zone if `zone` isn't set), overwriting the ones set in Sentry. To keep managing a monitor's schedule in Sentry, set `@SentryCheckIn(value = "", upsertMonitorConfig = false)`. -### Monitor All `@Scheduled` Methods - -From the next Sentry Java SDK release (after `8.60.0`), you can monitor every `@Scheduled` method without adding `@SentryCheckIn` to each one: - -```properties {filename:application.properties} -sentry.monitor-scheduled-tasks=true -# Optional: methods to skip, as ClassName.methodName or a regular expression -sentry.exclude-scheduled-tasks=ReportJobs.sendDailyReport,Internal.* -``` - -Each method gets a monitor slug built from its class and method name, for example `report-jobs-send-daily-report` for `ReportJobs.sendDailyReport`. Nested classes include the outer class name (`Outer.Inner.method`), and slugs longer than 50 characters are shortened with a hash suffix. The schedule is sent as described above. Methods with schedules that can't be expressed in the Crons schedule format (for example, a `fixedDelay` job) still send check-ins, but without a monitor configuration, so create those monitors in Sentry first. - -Methods annotated with `@SentryCheckIn` keep their own slug and settings. Methods on `final` classes and `final` methods can't be monitored this way. - ## Heartbeat Heartbeat monitoring notifies Sentry of a job's status through one check-in. This setup will only notify you if your job didn't start when expected (missed). If you need to track a job to see if it exceeded its maximum runtime (failed), use check-ins instead. To start sending heartbeats simply add the `@SentryCheckIn(monitorSlug = "", heartbeat = true)` annotation to the method you want to send heartbeats for. From 39f3abe1c0563516a7bf11be64c467c8092501bb Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Mon, 19 Oct 2026 18:04:11 -0700 Subject: [PATCH 3/4] chore: Retrigger Vercel build Co-Authored-By: Claude From 13b829c65b46548c920381d35c177331d4816648 Mon Sep 17 00:00:00 2001 From: Dan Fuller Date: Tue, 20 Oct 2026 10:50:13 -0700 Subject: [PATCH 4/4] docs(crons): Fix Spring monitor-all version and requirements Co-Authored-By: Claude --- platform-includes/crons/setup/java.spring-boot.mdx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/platform-includes/crons/setup/java.spring-boot.mdx b/platform-includes/crons/setup/java.spring-boot.mdx index 57c5d20fa19db..a57ac2d2454c5 100644 --- a/platform-includes/crons/setup/java.spring-boot.mdx +++ b/platform-includes/crons/setup/java.spring-boot.mdx @@ -2,7 +2,7 @@ If you are using [Quartz](http://www.quartz-scheduler.org/), please see -The `@SentryCheckIn` annotation requires `org.aspectj:aspectjweaver` to be present as a dependency in your project. +The `@SentryCheckIn` annotation and `sentry.monitor-scheduled-tasks` require `org.aspectj:aspectjweaver` to be present as a dependency in your project. @@ -12,7 +12,7 @@ Check-in monitoring allows you to track a job's progress by completing two check ### Monitor All `@Scheduled` Methods -We recommend monitoring every `@Scheduled` method. From the next Sentry Java SDK release (after `8.60.0`), you can do this without adding `@SentryCheckIn` to each one: +We recommend monitoring every `@Scheduled` method. From the next Sentry Java SDK release (after `8.61.0`), you can do this without adding `@SentryCheckIn` to each one: ```properties {filename:application.properties} sentry.monitor-scheduled-tasks=true @@ -22,7 +22,7 @@ sentry.exclude-scheduled-tasks=ReportJobs.sendDailyReport,Internal.* Each method gets a monitor slug built from its class and method name, for example `report-jobs-send-daily-report` for `ReportJobs.sendDailyReport`. Nested classes include the outer class name (`Outer.Inner.method`), and slugs longer than 50 characters are shortened with a hash suffix. The schedule is sent as described in [Monitor Configuration From `@Scheduled`](#monitor-configuration-from-scheduled). Methods with schedules that can't be expressed in the Crons schedule format (for example, a `fixedDelay` job) still send check-ins, but without a monitor configuration, so create those monitors in Sentry first. -Methods annotated with `@SentryCheckIn` keep their own slug and settings. Methods on `final` classes and `final` methods can't be monitored this way. +Methods annotated with `@SentryCheckIn` keep their own slug and settings and are checked in once per run. Methods on `final` classes, `final` methods, and reactive or Kotlin `suspend` methods can't be monitored this way. ### Monitor Specific Methods @@ -70,8 +70,6 @@ public class CustomJob { } ``` -With `sentry.monitor-scheduled-tasks` on, a method with `@SentryCheckIn` is checked in once per run, using the annotation's slug and settings. - ### Monitor Configuration From `@Scheduled` From the next Sentry Java SDK release (after `8.60.0`), `@SentryCheckIn` reads the method's `@Scheduled` annotation and sends a monitor configuration with the in-progress check-in by default, so Sentry creates the monitor, or updates its schedule, from your code: