Skip to content

feat(spring): Add an option to monitor all @Scheduled methods in Spring Boot 3 - #6275

Merged
wedamija merged 29 commits into
mainfrom
danf/spring-monitor-scheduled-tasks
Nov 5, 2026
Merged

wedamija merged 29 commits into
mainfrom
danf/spring-monitor-scheduled-tasks

Conversation

@wedamija

@wedamija wedamija commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Part of a series adding automatic Crons monitoring for the most-used job schedulers in each SDK. Check-ins for a monitor that doesn't exist yet are dropped, so today each monitor has to be created by hand with its schedule copied from the code. Sending the job's schedule as the monitor config lets Sentry create the monitor and keep it in sync.

This adds sentry.monitor-scheduled-tasks for Spring Boot 3, which monitors every @Scheduled method without adding @SentryCheckIn to each one, and sentry.exclude-scheduled-tasks to skip methods by ClassName.methodName, exactly or as a regex. The monitor slug is the class and method name in kebab case. Methods with @SentryCheckIn keep their own settings. Off by default.

sentry.monitor-scheduled-tasks=true
sentry.exclude-scheduled-tasks=ReportJobs.sendDailyReport,Internal.*

Methods with schedules Crons can't express, like fixedDelay or several schedules on one method, aren't monitored. Final classes and methods are skipped since Spring can't proxy them, and so are reactive and Kotlin suspend methods.

Spring Boot 2 and 4 follow in #6276 and #6277.

Stacked on #6215.

wedamija and others added 13 commits October 2, 2026 12:53
…figs

Framework-free conversion of a 6 field cron expression, fixed rate or
fixed delay into a MonitorConfig, plus period parsing, so the Spring and
Quartz integrations can share it.
Return no config when day of month and day of week are both set, for
cron syntax Sentry rejects, and for zones that are not IANA region IDs.
Whole-hour fixed offsets map to Etc/GMT zones. Intervals use hours or
days when they divide evenly.
Move the Spring day-of-week rewrite and the JVM default zone rule into
core so the three Spring modules share them.
Spring and Quartz run 10-10/2 only at 10, cronsim steps to the field max.
Spring before 5.3 steps day of month */n from 0 and can run at midnight
when both day fields are set; read its crons that way. Spring 5.3 runs
#5 in months without a fifth weekday, so return null for it. A fixed
delay drifts from any interval, so it gets no config.
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
SUN-SUN was rewritten to 0-7, which crontab reads as every day.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
…tor-scheduled-tasks

Adds sentry.monitor-scheduled-tasks and sentry.exclude-scheduled-tasks to
Spring Boot 3. Methods without @SentryCheckIn get a slug from the class
and method name and send their @scheduled schedule as the monitor config.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor
Messages
📖 Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 2a61e06

@sentry

sentry Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
SDK Size io.sentry.tests.size 8.63.0 (1) release

⚙️ sentry-android Build Distribution Settings

@wedamija wedamija changed the title feat(spring): Monitor all @Scheduled methods in Spring Boot 3 feat(spring): Add an option to monitor all @Scheduled methods in Spring Boot 3 Oct 20, 2026
… all tasks

Spring calls reactive and suspend @scheduled methods once at startup and
subscribes to the result on each run, so check-ins around the call would
only be sent once.

Co-Authored-By: Claude <noreply@anthropic.com>
@linear-code

linear-code Bot commented Oct 21, 2026

Copy link
Copy Markdown

JAVA-789

Dropping a non-zero seconds field makes check-ins arrive up to 59s after
the expected minute, which a 1 minute margin barely covers.
…like Spring

Existing @SentryCheckIn users shouldn't have their monitors changed on upgrade,
so sending the schedule is opt-in. Find @scheduled with Spring's own lookup so
an overriding method doesn't inherit a parent's schedule.
…monitor-scheduled-tasks

# Conflicts:
#	CHANGELOG.md
An overriding method without @scheduled isn't scheduled by Spring, so don't
monitor it either.
Base automatically changed from danf/spring-checkin-scheduled-config to main November 5, 2026 19:51
…cheduled-tasks

# Conflicts:
#	CHANGELOG.md
#	sentry-spring-jakarta/src/main/java/io/sentry/spring/jakarta/checkin/SentryCheckInAdvice.java
Derived slugs use only the short class name and method name, so different methods can map to the same slug and share one monitor. Log a warning the first time that happens so users can set an explicit slug.
Use the same class for the task name and the collision check so both see one value.
@wedamija
wedamija marked this pull request as ready for review November 5, 2026 20:38
@wedamija
wedamija requested a review from a team as a code owner November 5, 2026 20:38
@wedamija
wedamija requested review from 0xadam-brown and runningcode and removed request for a team November 5, 2026 20:38

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 09e7160. Configure here.

…ng all tasks

Spring invokes private and static scheduled methods on the target, so the proxy never sees them. Don't match them, so they aren't proxied for nothing.
@wedamija
wedamija merged commit 24363df into main Nov 5, 2026
44 checks passed
@wedamija
wedamija deleted the danf/spring-monitor-scheduled-tasks branch November 5, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants