diff --git a/spring-boot-admin-docs/src/site/docs/01-getting-started/50-snapshots.md b/spring-boot-admin-docs/src/site/docs/01-getting-started/50-snapshots.md
index ef7261fa1e2..85fce47d19f 100644
--- a/spring-boot-admin-docs/src/site/docs/01-getting-started/50-snapshots.md
+++ b/spring-boot-admin-docs/src/site/docs/01-getting-started/50-snapshots.md
@@ -36,7 +36,7 @@ sonatype snapshot repositories:
true
- http:s//repo.spring.io/snapshot
+ https://repo.spring.io/snapshot
```
diff --git a/spring-boot-admin-docs/src/site/docs/02-server/02-security.md b/spring-boot-admin-docs/src/site/docs/02-server/02-security.md
index db622c0617e..005947f1db3 100644
--- a/spring-boot-admin-docs/src/site/docs/02-server/02-security.md
+++ b/spring-boot-admin-docs/src/site/docs/02-server/02-security.md
@@ -13,6 +13,8 @@ A Spring Security configuration for your server could look like this:
```java title="SecuritySecureConfig.java"
+import org.springframework.http.HttpMethod;
+
@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig {
@@ -32,13 +34,17 @@ public class SecuritySecureConfig {
successHandler.setDefaultTargetUrl(this.adminServer.path("/"));
http.authorizeHttpRequests((authorizeRequests) -> authorizeRequests //
- .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/assets/**")))
+ .requestMatchers(PathPatternRequestMatcher.withDefaults()
+ .matcher(this.adminServer.path("/assets/**")))
.permitAll() // (1)
- .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/actuator/info")))
+ .requestMatchers(PathPatternRequestMatcher.withDefaults()
+ .matcher(this.adminServer.path("/actuator/info")))
.permitAll()
- .requestMatchers(new AntPathRequestMatcher(adminServer.path("/actuator/health")))
+ .requestMatchers(PathPatternRequestMatcher.withDefaults()
+ .matcher(this.adminServer.path("/actuator/health")))
.permitAll()
- .requestMatchers(new AntPathRequestMatcher(this.adminServer.path("/login")))
+ .requestMatchers(PathPatternRequestMatcher.withDefaults()
+ .matcher(this.adminServer.path("/login")))
.permitAll()
.dispatcherTypeMatchers(DispatcherType.ASYNC)
.permitAll() // https://github.com/spring-projects/spring-security/issues/11027
@@ -53,9 +59,12 @@ public class SecuritySecureConfig {
.csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler())
.ignoringRequestMatchers(
- new AntPathRequestMatcher(this.adminServer.path("/instances"), POST.toString()), // (6)
- new AntPathRequestMatcher(this.adminServer.path("/instances/*"), DELETE.toString()), // (6)
- new AntPathRequestMatcher(this.adminServer.path("/actuator/**")) // (7)
+ PathPatternRequestMatcher.withDefaults()
+ .matcher(HttpMethod.POST, this.adminServer.path("/instances")), // (6)
+ PathPatternRequestMatcher.withDefaults()
+ .matcher(HttpMethod.DELETE, this.adminServer.path("/instances/*")), // (6)
+ PathPatternRequestMatcher.withDefaults()
+ .matcher(this.adminServer.path("/actuator/**")) // (7)
));
http.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));
diff --git a/spring-boot-admin-docs/src/site/docs/02-server/20-Clustering.mdx b/spring-boot-admin-docs/src/site/docs/02-server/20-Clustering.mdx
index 21622c6f0b4..79726a9cc42 100644
--- a/spring-boot-admin-docs/src/site/docs/02-server/20-Clustering.mdx
+++ b/spring-boot-admin-docs/src/site/docs/02-server/20-Clustering.mdx
@@ -12,9 +12,10 @@ Spring Boot Admin Server supports cluster replication via Hazelcast. It is autom
You can also configure the Hazelcast instance to be persistent, to keep the status over restarts. Also have a look at the [Spring Boot support for Hazelcast](http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-hazelcast/).
When using clustering, Spring Boot Admin Events and Notifications are replicated across the members in the cluster.
-The applications are not replicated, each instance of Spring Boot Admin will have its own set of applications.
-This means that each instance has to monitor all applications, which may lead to increased load on the monitored services.
-Otherwise, you would have to ensure that each application is only monitored by one instance of Spring Boot Admin.
+The registered applications themselves are not replicated — each instance of Spring Boot Admin independently polls
+its own set of registered clients. This means each node monitors all applications, which may lead to increased
+load on the monitored services. If that is a concern, ensure that each application is registered with only one
+instance of Spring Boot Admin.

diff --git a/spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mail.mdx b/spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mail.mdx
index 372322c9e19..9a1917f21fa 100644
--- a/spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mail.mdx
+++ b/spring-boot-admin-docs/src/site/docs/02-server/notifications/notifier-mail.mdx
@@ -7,7 +7,7 @@ import { PropertyTable } from "@sba/spring-boot-admin-docs/src/site/src/componen
# Mail Notifications
-Mail notifications will be delivered as HTML emails rendered using https://www.thymeleaf.org/[Thymeleaf] templates.
+Mail notifications will be delivered as HTML emails rendered using [Thymeleaf](https://www.thymeleaf.org/) templates.
To enable Mail notifications, configure a `JavaMailSender` using `spring-boot-starter-mail` and set a recipient.
diff --git a/spring-boot-admin-docs/src/site/docs/03-client/10-client-features.md b/spring-boot-admin-docs/src/site/docs/03-client/10-client-features.md
index bfedb83ec6c..f309ffe0c13 100644
--- a/spring-boot-admin-docs/src/site/docs/03-client/10-client-features.md
+++ b/spring-boot-admin-docs/src/site/docs/03-client/10-client-features.md
@@ -52,11 +52,17 @@ You might want to set spring.jmx.enabled=true if you want to expose Spring beans
Spring Boot 4 does not support Jolokia directly, you need a separate dependency for Spring Boot 4-based applications.
See https://jolokia.org/reference/html/manual/spring.html for more details.
+:::note
+The artifact for Spring Boot 4 is named `jolokia-support-springboot` (no number suffix) — this is the
+current/latest Jolokia Spring Boot integration, intended for Spring Boot 4+. The Spring Boot 3 variant carries
+an explicit `3` suffix (`jolokia-support-springboot3`).
+:::
+
```xml title="pom.xml"
org.jolokiajolokia-support-springboot
- 2.5.0
+ x.y.z
```
@@ -68,8 +74,8 @@ See https://jolokia.org/reference/html/manual/spring.html for more details.
```xml title="pom.xml"
org.jolokia
- jolokia-support-springboot-3
- 2.5.0
+ jolokia-support-springboot3
+ x.y.z
```
@@ -82,6 +88,7 @@ provided the actuator itself, so you only need the plain jolokia dependency.
org.jolokiajolokia-core
+ x.y.z
```
diff --git a/spring-boot-admin-docs/src/site/docs/06-customization/monitoring/02-custom-health-status.md b/spring-boot-admin-docs/src/site/docs/06-customization/monitoring/02-custom-health-status.md
index c690938c46f..5034e0e7b47 100644
--- a/spring-boot-admin-docs/src/site/docs/06-customization/monitoring/02-custom-health-status.md
+++ b/spring-boot-admin-docs/src/site/docs/06-customization/monitoring/02-custom-health-status.md
@@ -220,11 +220,14 @@ import de.codecentric.boot.admin.server.web.client.InstanceWebClient;
public class CustomHealthEndpointStatusUpdater extends StatusUpdater {
+ private final InstanceWebClient instanceWebClient;
+
public CustomHealthEndpointStatusUpdater(
InstanceRepository repository,
InstanceWebClient instanceWebClient,
ApiMediaTypeHandler apiMediaTypeHandler) {
super(repository, instanceWebClient, apiMediaTypeHandler);
+ this.instanceWebClient = instanceWebClient;
}
@Override
@@ -238,11 +241,10 @@ public class CustomHealthEndpointStatusUpdater extends StatusUpdater {
.getMetadata()
.getOrDefault("health-path", "/actuator/health");
- return instanceWebClient.instance(instance)
+ return this.instanceWebClient.instance(instance)
.get()
.uri(customHealthPath)
.exchangeToMono(this::convertStatusInfo)
- .timeout(getTimeoutWithMargin())
.onErrorResume(this::handleError)
.map(instance::withStatusInfo);
}
diff --git a/spring-boot-admin-docs/src/site/docs/11-upgrading/01-spring-boot-admin-4.md b/spring-boot-admin-docs/src/site/docs/11-upgrading/01-spring-boot-admin-4.md
index bf3bc67d3a1..08002c257cf 100644
--- a/spring-boot-admin-docs/src/site/docs/11-upgrading/01-spring-boot-admin-4.md
+++ b/spring-boot-admin-docs/src/site/docs/11-upgrading/01-spring-boot-admin-4.md
@@ -176,30 +176,21 @@ spring:
- Search your configuration files for `prefer-ip`
- Replace with `service-host-type: IP` (if `prefer-ip: true`) or `service-host-type: HOST_NAME` (if `prefer-ip: false`)
----
-
### 4. Jolokia Compatibility
**What Changed:**
-The current stable Jolokia version (2.4.2) does not yet support Spring Boot 4. Spring Boot Admin 4 temporarily
-downgrades to **Jolokia 2.1.0** for basic JMX functionality.
-
-**Limitations:**
-
-- Some advanced Jolokia features may not be available
-- JMX operations work but with reduced functionality compared to Jolokia 2.4.2
-
-**Future Outlook:**
-
-Spring Boot Admin will upgrade to a newer Jolokia version once Spring Boot 4 support is added. Monitor
-the [Jolokia project](https://github.com/jolokia/jolokia) for updates on Spring Boot 4 compatibility.
+Spring Boot Admin 4 manages the Jolokia Spring Boot integration **`org.jolokia:jolokia-support-springboot` 2.5.x**, which supports Spring Boot 4.
**Action Required:**
-- **No immediate action needed** - Jolokia 2.1.0 is included automatically and provides basic JMX functionality
-- Test your JMX operations to ensure they work with the limited feature set
-- If JMX functionality is critical, consider waiting for full Jolokia support before upgrading
+- Jolokia 2.5.x is compatible with Spring Boot 4 and Spring Boot Admin 4.
+- If you use **JMX-Bean Management**, you must add the appropriate Jolokia Spring Boot support dependency to each
+ client application, matching the client's Spring Boot major version (for example, `jolokia-support-springboot`
+ for Spring Boot 4+ clients and `jolokia-support-springboot3` for Spring Boot 3.x clients). For Spring Boot 2.x
+ applications managed by Spring Boot Admin 2 or 3, use `jolokia-core` as described in the corresponding SBA
+ version documentation. See the [JMX-Bean Management](../03-client/10-client-features.md#jmx-bean-management)
+ section for the exact dependency coordinates per Spring Boot version.
---
@@ -281,7 +272,7 @@ mvn spring-boot:run
- Health checks update correctly
- Actuator endpoints are accessible
- Notifications fire properly
- - JMX operations work (with Jolokia 2.1.0 limitations)
+ - JMX operations work via Jolokia
### Step 5: Monitor Logs
@@ -314,7 +305,6 @@ If you encounter issues during the upgrade:
- ✅ Replace `org.springframework.lang.Nullable` with `org.jspecify.annotations.Nullable`
- ✅ Migrate client from `WebClient` to `RestClient`
- ✅ Change `prefer-ip` to `service-host-type`
-- ⚠️ Accept Jolokia 2.1.0 limitations temporarily
Most applications can upgrade with minimal code changes, primarily focused on configuration updates and dependency
management.