Our Blog

Sharing Our Experiences

Spring Debugger: Diepgaand Debuggen van Spring Boot Applicaties met IntelliJ

In de wereld van Spring Boot development is debugging vaak een frustrerende ervaring. Je zit met honderden beans, complexe configuraties, en runtime gedrag dat niet altijd transparant is. Tijdens de Happy Hour sessie van juli 2025 gaf Ruben Schroyen een hands-on introductie tot de Spring Debugger plugin voor IntelliJ IDEA Ultimate. In deze blog duiken we dieper in de technische meerwaarde van deze tool.

Waarom een aparte Spring Debugger?

De Spring Debugger is een losstaande plugin voor IntelliJ IDEA Ultimate. Het doel is om sneller te kunnen releasen dan de IntelliJ release cycle toelaat. Hoewel de plugin afhankelijk blijft van de IntelliJ Debugger API, biedt deze aanpak meer flexibiliteit en ruimte voor innovatie.

De plugin ondersteunt debugging voor:

  • Spring Boot applicaties

  • Unit tests (JUnit, TestNG)

  • Maven/Gradle builds

  • Remote JVM debugging

Features

Feature 1: Configuratie-inzicht tijdens runtime

Een van de grootste frustraties bij Spring is het achterhalen van welke configuratie effectief actief is. De Spring Debugger maakt het mogelijk om:

  • Actieve @Configuration-klassen te inspecteren

  • De status van beans (geladen, gemockt, niet geladen) visueel te bekijken

  • Snel te navigeren naar de bron van properties en beans

Voorbeeld: Je hebt een @ConditionalOnProperty op een bean, maar die wordt niet geïnjecteerd. De debugger toont dat de bean transparant is (niet geladen) en je kan meteen de reden achterhalen.

 

Feature 2: Evaluatie van properties en beans

Tijdens het debuggen kun je via de Evaluate Expression tool in IntelliJ toegang krijgen tot alle Spring beans en properties, zelfs als ze niet in scope zijn van de huidige stackframe.

Voorbeeld: Je zit in een serviceklasse en wil weten welke database-URL actief is. Je evalueert environment.getProperty("spring.datasource.url") en ziet meteen de waarde én de bronconfiguratie.

Feature 3: Debuggen van transacties

De plugin laat je toe om:

  • Het type transactie te inspecteren (REQUIREDREQUIRES_NEW, …)

  • De oorsprong van de transactie te achterhalen (welke methode heeft ze gestart?)

  • De status van entiteiten in de huidige persistence context te bekijken

Voorbeeld: Je krijgt een LazyInitializationException bij het ophalen van een User.getRoles(). De debugger toont dat de roles-collectie niet in de huidige transactie geladen is, en dat de sessie al gesloten is.

Feature 4: Datasource discovery

De plugin detecteert automatisch datasources, ook wanneer je werkt met Testcontainers of dynamisch geconfigureerde datasources. Je kan deze datasources live inspecteren en refreshen.

Voorbeeld: Tijdens een integratietest met een PostgreSQL Testcontainer zie je dat de datasource correct geïnitialiseerd is, en je kan de connecties live volgen.

Feature 5: Bean visualisatie

Beans worden visueel weergegeven met kleurcodes:

  • Groen: geladen

  • Transparant: niet geladen

  • Geel: gemockt (bijvoorbeeld via Mockito)

Je kan ook filteren op bean types, scopes, en qualifiers.

Voorbeeld: Je hebt een @MockBean in een testklasse. De debugger toont dat deze bean geel is, en je ziet meteen dat de echte implementatie overschreven werd.

Andere handige toepassingen

  • Navigatie naar de bron van properties: Je kan klikken op een property zoals spring.jpa.show-sql en meteen naar de YAML of properties file springen waar die gedefinieerd is.

  • Inspectie van @Value injecties: Zie welke waarde effectief geïnjecteerd werd in een veld.

  • Debuggen van @Scheduled of @Async methodes: Omdat deze vaak buiten de standaard call stack vallen, is het handig om via de Spring context alsnog inzicht te krijgen.

Meer leren?

Wat brengt de toekomst?

De roadmap van de plugin bevat veelbelovende features:

  • Ondersteuning voor @Cacheable debugging

  • Event tracing

  • HTTP tracing

  • Spring Security debugging

  • Database connection profiling

Conclusie

De Spring Debugger is een krachtige aanvulling op de standaard debugging tools van IntelliJ. Voor developers die werken aan complexe Spring Boot applicaties biedt het een unieke inkijk in de runtime context van je applicatie. Het is een tool die niet alleen bugs helpt oplossen, maar ook je begrip van je eigen applicatie verdiept.

Share this post