From c7addb94d479d2884ae5def714cfc314fc6caad9 Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Thu, 29 Feb 2024 21:22:10 +0100 Subject: [PATCH] Show warning if incompatible spring boot version is detected (#3233) * check for spring boot version and show warning on startup if incompatible * add changelog * Update CHANGELOG.md Co-authored-by: Alexander Dinauer --------- Co-authored-by: Alexander Dinauer --- CHANGELOG.md | 2 ++ .../jakarta/SentrySpringVersionChecker.java | 30 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 1 + .../boot/SentrySpringVersionChecker.java | 30 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 ++ 5 files changed, 65 insertions(+) create mode 100644 sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentrySpringVersionChecker.java create mode 100644 sentry-spring-boot-jakarta/src/main/resources/META-INF/spring.factories create mode 100644 sentry-spring-boot/src/main/java/io/sentry/spring/boot/SentrySpringVersionChecker.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cfc1ef44c..d9e3490feb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - Add `enableScopePersistence` option to disable `PersistingScopeObserver` used for ANR reporting which may increase performance overhead. Defaults to `true` ([#3218](https://github.com/getsentry/sentry-java/pull/3218)) - When disabled, the SDK will not enrich ANRv2 events with scope data (e.g. breadcrumbs, user, tags, etc.) - Configurable defaults for Cron - MonitorConfig ([#3195](https://github.com/getsentry/sentry-java/pull/3195)) +- We now display a warning on startup if an incompatible version of Spring Boot is detected ([#3233](https://github.com/getsentry/sentry-java/pull/3233)) + - This should help notice a mismatching Sentry dependency, especially when upgrading a Spring Boot application ### Fixes diff --git a/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentrySpringVersionChecker.java b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentrySpringVersionChecker.java new file mode 100644 index 0000000000..7fb6d1ce23 --- /dev/null +++ b/sentry-spring-boot-jakarta/src/main/java/io/sentry/spring/boot/jakarta/SentrySpringVersionChecker.java @@ -0,0 +1,30 @@ +package io.sentry.spring.boot.jakarta; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.boot.SpringBootVersion; +import org.springframework.boot.context.event.ApplicationContextInitializedEvent; +import org.springframework.context.ApplicationListener; + +final class SentrySpringVersionChecker + implements ApplicationListener { + + private static final Log logger = LogFactory.getLog(SentrySpringVersionChecker.class); + + @Override + public void onApplicationEvent(ApplicationContextInitializedEvent event) { + + if (!SpringBootVersion.getVersion().startsWith("3")) { + logger.warn("############################### WARNING ###############################"); + logger.warn("## ##"); + logger.warn("## !Incompatible Spring Boot Version detected! ##"); + logger.warn("## Please see the sentry docs linked below ##"); + logger.warn("## Choose your Spring Boot version and ##"); + logger.warn("## install the matching dependency ##"); + logger.warn("## ##"); + logger.warn("## https://docs.sentry.io/platforms/java/guides/spring-boot/#install ##"); + logger.warn("## ##"); + logger.warn("#######################################################################"); + } + } +} diff --git a/sentry-spring-boot-jakarta/src/main/resources/META-INF/spring.factories b/sentry-spring-boot-jakarta/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000000..4002cb6ed5 --- /dev/null +++ b/sentry-spring-boot-jakarta/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.context.ApplicationListener=io.sentry.spring.boot.jakarta.SentrySpringVersionChecker diff --git a/sentry-spring-boot/src/main/java/io/sentry/spring/boot/SentrySpringVersionChecker.java b/sentry-spring-boot/src/main/java/io/sentry/spring/boot/SentrySpringVersionChecker.java new file mode 100644 index 0000000000..1cbcb4f090 --- /dev/null +++ b/sentry-spring-boot/src/main/java/io/sentry/spring/boot/SentrySpringVersionChecker.java @@ -0,0 +1,30 @@ +package io.sentry.spring.boot; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.boot.SpringBootVersion; +import org.springframework.boot.context.event.ApplicationContextInitializedEvent; +import org.springframework.context.ApplicationListener; + +final class SentrySpringVersionChecker + implements ApplicationListener { + + private static final Log logger = LogFactory.getLog(SentrySpringVersionChecker.class); + + @Override + public void onApplicationEvent(ApplicationContextInitializedEvent event) { + + if (!SpringBootVersion.getVersion().startsWith("2")) { + logger.warn("############################### WARNING ###############################"); + logger.warn("## ##"); + logger.warn("## !Incompatible Spring Boot Version detected! ##"); + logger.warn("## Please see the sentry docs linked below ##"); + logger.warn("## Choose your Spring Boot version and ##"); + logger.warn("## install the matching dependency ##"); + logger.warn("## ##"); + logger.warn("## https://docs.sentry.io/platforms/java/guides/spring-boot/#install ##"); + logger.warn("## ##"); + logger.warn("#######################################################################"); + } + } +} diff --git a/sentry-spring-boot/src/main/resources/META-INF/spring.factories b/sentry-spring-boot/src/main/resources/META-INF/spring.factories index 0d71d6cad7..9712f4b407 100644 --- a/sentry-spring-boot/src/main/resources/META-INF/spring.factories +++ b/sentry-spring-boot/src/main/resources/META-INF/spring.factories @@ -2,3 +2,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ io.sentry.spring.boot.SentryAutoConfiguration,\ io.sentry.spring.boot.SentryLogbackAppenderAutoConfiguration,\ io.sentry.spring.boot.SentryWebfluxAutoConfiguration + +org.springframework.context.ApplicationListener=io.sentry.spring.boot.SentrySpringVersionChecker