Spring Boot inspector
Paste Spring Boot Actuator output and read it: why each auto-configuration did or didn't apply, the bean dependency graph, which property source wins for every key, bound @ConfigurationProperties, the endpoint table, metrics and health. Plus a properties ↔ YAML converter with profiles, a checker for common keys, and every relaxed-binding form of a property name.
Added
Works with
- Connection pool sizing Databases and streamingsends the Hikari pool settings from the config checker to the pool sizing tool
How to use it
Actuator tells you almost everything about a running Spring Boot app, as several hundred kilobytes
of JSON. This page reads that JSON. Paste the output of one or more endpoints (or open the files)
and each gets its own tab. It opens with the output of a real Spring Boot 3.3.5 app — web, JPA on
H2 and actuator, with an environment variable, a command-line argument, a profile document, a
replaced ObjectMapper and an excluded auto-configuration — so every tab has something in it.
How to use it
Get the JSON with curl (the endpoints must be exposed: management.endpoints.web.exposure.include)
and paste it in, several at once if you like: curl -s localhost:8080/actuator/conditions | pbcopy.
-
Conditions (
/actuator/conditions, the--debugreport as JSON) — every auto-configuration, its nested configurations and@Beanmethods, applied or not, with each condition’s result. Group by auto-configuration or by area (data access, web, actuator, messaging…), filter to what didn’t apply, and search for a class, a condition or a property. A failed condition is turned into the thing to do: add spring-boot-starter-amqp to bring in RabbitTemplate, set spring.h2.console.enabled=true, your bean 'shopObjectMapper' took its place. A list at the bottom explains each condition type in the report. -
Beans (
/actuator/beans) — search by name, type or resource; your own beans are marked. Pick one to see its type, scope, what defined it (component scan, a@Beanmethod, an auto-configuration), what it uses and what uses it, drawn as a graph one or two hops out. With nothing picked, the graph shows your beans and what they depend on. Dependency cycles are flagged (Boot 2.6+ refuses them by default). Parent contexts are shown when there are several. -
Environment (
/actuator/env, or/actuator/env/<name>for one key) — the active profiles, every property source in precedence order, and every key with the value that wins and where it came from. Click a key to see every source that sets it, the hidden ones struck through. Keys are matched the way Boot binds them, soshop.maxBasketin a file andSHOP_MAX_BASKETin the environment are one key. Masked values () are shown as masked; values that look like passwords but aren’t masked are called out. -
Config props (
/actuator/configprops) — every@ConfigurationPropertiesbean with its bound values in kebab-case and the origin of each one (file and line, environment variable, command line), or none when it’s a default. -
Mappings (
/actuator/mappings) — the request mappings as a table: methods, paths, consumes / produces / params / headers and the handler method, split into your routes, actuator, static resources and error handling; then the servlets and filters. WebFlux handlers are read too. -
Metrics & health —
/actuator/healthas a tree with each component’s details, the meter names from/actuator/metricsgrouped by prefix (click one to copy its curl command), and the numbers from any/actuator/metrics/<name>you paste, with the mean for timers. -
Properties ↔ YAML — converts both ways.
#---documents in a.propertiesfile become---YAML documents (withspring.config.activate.on-profilecarried across),[0]indexes become lists, bracketed map keys like[/api/**]are kept and quoted. Going to YAML, values YAML 1.1 would change are quoted:NOwould becomefalse,0123an octal number,1.10the number 1.1 and12:30the base-60 number 750. Going to properties, non-ASCII characters are written as\uXXXX, because Boot reads.propertiesfiles as ISO-8859-1. -
Check config — paste
application.propertiesorapplication.yml. It checks the commonserver.,spring.datasource.(with Hikari),spring.jpa.,management.andlogging.keys: types, enums, durations and data sizes; keys renamed or removed between 2.x and 3.x (spring.redis.,server.tomcat.max-threads,logging.file…); near-misses (did you mean show-details?); Hikari’s own limits, which it otherwise fixes silently with a log line (max-lifetimeunder 30 s,keepalive-timeat or abovemax-lifetime, leak detection under 2 s, and durations like30sthat Hikari’s millisecond setters can’t take); profile rules (spring.profiles.includeinside a profile document stops Boot starting); and settings that leak data (exposure.include: "",show-values: always, stack traces in error pages). It also lists what each recognised key does with its default. When the config sets a Hikari pool, *Size this pool opens it in the connection pool planner. -
Relaxed binding — type a property name, or an environment variable, and see every form: canonical kebab-case, camelCase, the environment variable and its legacy form,
-D, command-line,SPRING_APPLICATION_JSONand YAML. The rules underneath explain what@ConfigurationPropertiesaccepts, what@Valuedoesn’t, and whyLOGGING_LEVEL_ORG_HIBERNATE_SQLdoesn’t reach theorg.hibernate.SQLlogger (I checked: on the example app it setorg.hibernate.sql, a different logger).
Spring Boot versions
The formats are Boot 3.x, checked against real output from 3.3.5. Boot 2.x output reads the same way (I compared a 2.7.18 build of the same app); the differences that matter:
-
In 3.x
/envand/configpropsmask every value unlessmanagement.endpoint.env.show-values(andconfigprops.show-values) say otherwise, andalwaysthen shows everything, passwords included. 2.x showed values and masked keys that looked like secrets. -
/healthin 2.0 and 2.1 nests components underdetails; 2.2+ usescomponents. Both read. -
1.x had
/autoconfiginstead of/conditionswith a flatter shape; it reads, but 1.x/mappingsand/beansdo not. -
The converter and checker follow 2.4+ config-file processing (
spring.config.activate.on-profileand#---); the checker flags the olderspring.profilesdocument key.
Related: connection pool sizing (Hikari settings and how big the pool should be), PostgreSQL playground, Kubernetes manifests (environment variables in a Deployment), DevOps YAML checks, format converter (JSON, YAML, TOML), JSON workbench and jq for digging into actuator JSON by hand.
Limits
-
The checker knows about 180 common keys, not the whole of Boot’s configuration metadata, so it says "not in this checker’s list" rather than "wrong" for keys it doesn’t know. Boot itself ignores unknown keys.
-
Line numbers for YAML findings are found by searching the text, so a repeated key name can point at the wrong line.
-
The Conditions report has short class names only (no packages), so areas are guessed from the names.
Privacy
Everything runs in this page. Actuator output you paste stays in your browser (in local storage,
so it is there when you come back; Clear removes it) and is never sent anywhere — share links
leave it out. A share link does carry the converter, checker and binding inputs, with anything
that looks like a password replaced by *. The converter and checker load k8s-core.js (the
YAML reader) from this site.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.