Spring

On this page, we get you up and running with Sentry's SDK.

Don't already have an account and Sentry project established? Head over to sentry.io, then return to this page.

Sentry captures data by using an SDK within your application’s runtime.

Copied
plugins {
  id "io.sentry.jvm.gradle" version "5.0.0"
}

For other dependency managers see the central Maven repository (Spring 5) and central Maven repository (Spring 6).

When running your application, please add our sentry-opentelemetry-agent to the java command. In case you are using an application server to run your .WAR file, please add it to the JAVA_OPTS of your application server. You can download the latest version of the sentry-opentelemetry-agent-8.0.0.jar from MavenCentral. It's also available as a ZIP containing the JAR used on this page on GitHub.

Copied
SENTRY_AUTO_INIT=false java -javaagent:sentry-opentelemetry-agent-8.0.0.jar -jar your-application.jar

In case of an application server, adding the Agent might look more like the following:

Copied
JAVA_OPTS="${JAVA_OPTS} -javaagent:/somewhere/sentry-opentelemetry-agent-8.0.0"

Configuration should happen as early as possible in your application's lifecycle.

The sentry-spring and sentry-spring-jakarta libraries provide an @EnableSentry annotation that registers all required Spring beans. @EnableSentry can be placed on any class annotated with @Configuration including the main entry class in Spring Boot applications annotated with @SpringBootApplication.

Copied
import io.sentry.spring.EnableSentry;
// NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry
// project/dashboard
@EnableSentry(dsn = "https://examplePublicKey@o0.ingest.sentry.io/0")
@Configuration
class SentryConfiguration {
}

The DSN can be also provided through the system property sentry.dsn, environment variable SENTRY_DSN or the dsn property in sentry.properties file. See the configuration page for more details on external configuration.

Once this integration is configured you can also use Sentry’s static API, as shown on the usage page, to record breadcrumbs, set the current user, or manually send events, for example.

By default, only unhandled exceptions are sent to Sentry. This behavior can be tuned through configuring the exceptionResolverOrder property. For example, setting it to Ordered#HIGHEST_PRECEDENCE ensures exceptions that have been handled by exception resolvers with higher order are sent to Sentry - including ones handled by @ExceptionHandler annotated methods.

Copied
import io.sentry.spring.EnableSentry;
import org.springframework.core.Ordered;
// NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry
// project/dashboard
@EnableSentry(
  dsn = "https://examplePublicKey@o0.ingest.sentry.io/0",
  exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE
)
class SentryConfiguration {
}

The SDK can be configured using a sentry.properties file:

sentry.properties
Copied
traces-sample-rate=1.0

This snippet includes an intentional error, so you can test that everything is working as soon as you set it up.

Copied
import io.sentry.Sentry;

try {
  throw new Exception("This is a test.");
} catch (Exception e) {
  Sentry.captureException(e);
}

To view and resolve the recorded error, log into sentry.io and select your project. Clicking on the error's title will open a page where you can see detailed information and mark it as resolved.

Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").