Actuator HTTP Trace Does Not Work With Spring Boot 2.2.x
TL;DR
In Spring Boot 2.2.x, you have to instanciate a @Bean
of type InMemoryHttpTraceRepository
to enable the HTTP Trace Actuator.
Jump to the explanation of and example code for the fix
Enabling HTTP Trace — Before 2.2.x...
Spring Boot comes with a very handy feature called Actuator. Actuator provides a build-in production-ready REST-API, that can be used to monitor / menage / debug your bootified App. To enable it — prior to 2.2.x —, one only had to:
-
Specifiy the dependency for Spring Boot Actuator:
<dependency> <groupId>org.springframework.boot <artifactId>spring-boot-starter-actuator </dependency>
-
Expose the needed endpoints via HTTP:
management.endpoints.web.exposure.include=*
- This exposes all available endpoints via HTTP.
-
Advise: Do not copy this into a production config
(Without thinking about it twice and — at least — enable some security measures to protect the exposed endpoints!)
The problem: It simply does not work any more in 2.2 :(
But…
- If you upgrade your existing app with a working
httptrace
-actuator to Spring Boot 2.2.x, or - If you start with a fresh app in Spring Boot 2.2.x and try to enable the
httptrace
-actuator as described in the documentation
…it simply does not work at all!
The Fix
The simple fix for this problem is, to add a @Bean
of type InMemoryHttpTraceRepository
to your @Configuration
-class:
@Bean
public HttpTraceRepository htttpTraceRepository()
{
return new InMemoryHttpTraceRepository();
}
The Explanation
The cause of this problem is not a bug, but a legitimate change in the default configuration. Unfortunately, this change is not noted in the according section of the documentation. Instead it is burried in the Upgrade Notes for Spring Boot 2.2
The default-implementation stores the captured data in memory. Hence, it consumes much memory, without the user knowing, or even worse: needing it. This is especially undesirable in cluster environments, where memory is a precious good. And remember: Spring Boot was invented to simplify cluster deployments!
That is, why this feature is now turned of by default and has to be turned on by the user explicitly, if needed.
Thank you