Spring Boot 3.1.5版本如何启用/actuator/jolokia端点?
解决Spring Boot中启用Jolokia的问题
单独依赖jolokia-core无法启用Jolokia端点,是因为它仅提供核心功能,缺少Spring Boot所需的自动配置或Servlet注册逻辑。结合你之前在Spring Boot 2.x中可用的情况,以下是针对不同场景的解决方案:
1. 使用Spring Boot专属的Jolokia Starter(推荐)
jolokia-spring-boot-starter会自动完成Servlet注册、端点配置等工作,是Spring Boot集成Jolokia最简便的方式:
Maven依赖
<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-spring-boot-starter</artifactId> <version>适配你的Spring Boot版本号</version> </dependency>
Gradle依赖
implementation 'org.jolokia:jolokia-spring-boot-starter:适配你的Spring Boot版本号'
版本匹配提示:Spring Boot 3.x需使用Jolokia 2.0.0及以上版本(适配Jakarta EE API);Spring Boot 2.x可使用Jolokia 1.x或兼容的2.x版本。
2. 手动注册Jolokia Servlet(若坚持用jolokia-core)
如果不想引入starter,需手动将Jolokia的AgentServlet注册到Spring Boot的Servlet容器中:
import org.jolokia.http.AgentServlet; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JolokiaConfig { @Bean public ServletRegistrationBean<AgentServlet> jolokiaServletRegistration() { ServletRegistrationBean<AgentServlet> registration = new ServletRegistrationBean<>(new AgentServlet()); registration.addUrlMappings("/jolokia/*"); // 自定义端点访问路径 registration.setName("JolokiaAgent"); return registration; } }
若你的应用是Reactive类型,需替换为JolokiaHttpHandler并注册到WebFlux中。
3. 配置访问权限与端点开放
基础访问配置
若搭配Spring Boot Actuator使用,需在配置文件中开启Jolokia端点:
# application.properties management.endpoint.jolokia.enabled=true management.endpoints.web.exposure.include=jolokia,health # 按需开放其他端点
Spring Security 拦截放行
如果应用启用了Spring Security,需允许Jolokia路径的访问:
Spring Boot 2.x(WebSecurityConfigurerAdapter)
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/jolokia/**").permitAll() .anyRequest().authenticated(); } }
Spring Boot 3.x(SecurityFilterChain)
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth .requestMatchers("/jolokia/**").permitAll() .anyRequest().authenticated()); return http.build(); } }
4. 版本兼容关键点
- Spring Boot 3.x升级到了Jakarta EE API,旧版Jolokia(1.x)依赖
javax.servlet,会导致类加载失败,必须使用Jolokia 2.0.0+版本。 - Spring Boot 2.x可继续使用Jolokia 1.x版本,无需额外调整依赖API。
内容的提问来源于stack exchange,提问作者Aliabbas Attarwala
相关产品推荐
相关产品推荐

