You need to enable JavaScript to run this app. 如何将Spring Boot Admin服务端与客户端合并部署为单个Spring Boot应用
优惠活动
大模型
产品
解决方案
定价
更多

如何将Spring Boot Admin服务端与客户端合并部署为单个Spring Boot应用

Spring Boot Admin 与业务应用同进程拆分整合实现方案

(适配环境:Spring Boot 2.3.4.RELEASE、Spring Boot Admin 2.3.0)

实现效果

单应用启动后同时运行两类独立服务:

  • 原有业务接口固定监听8080端口,原有访问逻辑不受影响
  • Spring Boot Admin 控制台固定监听8081端口,独立提供监控能力
  • 业务应用自动注册到内置的SBA实例,无需单独启动SBA服务、无需依赖外部启动脚本

第一步:引入匹配版本依赖

在业务应用的pom.xml中添加SBA核心依赖,注意版本与现有环境严格对应,避免兼容冲突:

  • 引入SBA服务端依赖,承载监控控制台核心能力
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.3.0</version>
</dependency>
  • 引入SBA客户端依赖,实现自身实例自动注册
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.3.0</version>
</dependency>

第二步:配置双端口拆分与访问隔离

Spring Boot默认仅支持单个Web端口,需要通过新增内嵌Tomcat连接器的方式,让8081端口专门承载SBA服务,同时配置过滤器隔离SBA路径,避免SBA服务在8080业务端口暴露。
新增配置类:

@Configuration
public class AdminMultiPortConfig {
    // 业务应用固定端口,与原服务配置保持一致
    @Value("${server.port:8080}")
    private int businessPort;
    // SBA专属运行端口
    @Value("${admin.server.port:8081}")
    private int adminPort;

    /**
     * 为内嵌Tomcat新增8081端口连接器,专门承载SBA服务请求
     */
    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> adminPortCustomizer() {
        return factory -> {
            Connector adminConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
            adminConnector.setPort(adminPort);
            factory.addAdditionalTomcatConnectors(adminConnector);
        };
    }

    /**
     * 端口隔离过滤器:拦截业务端口上的SBA路径请求,仅允许8081端口访问SBA资源
     */
    @Bean
    public FilterRegistrationBean<Filter> adminAccessIsolateFilter() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter((request, response, chain) -> {
            HttpServletRequest req = (HttpServletRequest) request;
            int currentRequestPort = req.getServerPort();
            String requestPath = req.getRequestURI();
            // 匹配SBA控制台的所有核心路径
            boolean isAdminPath = requestPath.startsWith("/instances")
                    || requestPath.startsWith("/applications")
                    || requestPath.startsWith("/wallboard")
                    || requestPath.startsWith("/journal")
                    || requestPath.startsWith("/about")
                    || requestPath.startsWith("/assets");
            // 如果请求从业务8080端口访问SBA路径,直接返回404
            if (currentRequestPort == businessPort && isAdminPath) {
                ((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
            chain.doFilter(request, response);
        });
        registration.addUrlPatterns("/*");
        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return registration;
    }
}

第三步:开启SBA服务端能力

在业务应用的启动类上添加@EnableAdminServer注解,激活SBA服务端的控制台接口能力:

@SpringBootApplication
@EnableAdminServer
public class BusinessApplication {
    public static void main(String[] args) {
        SpringApplication.run(BusinessApplication.class, args);
    }
}

第四步:配置自注册规则

在application.yml中补充客户端注册、actuator端点暴露的相关配置,注意注册地址要指向8081端口的SBA服务,避免注册失败:

server:
  # 业务应用主端口,与原配置保持一致
  port: 8080
# SBA专属端口配置,与配置类保持对应
admin:
  server:
    port: 8081
spring:
  boot:
    admin:
      client:
        # 注册地址指向本地内置的SBA服务8081端口
        url: http://localhost:8081
        instance:
          # 注册上报的实例地址、端口填业务应用的8080端口,供SBA拉取actuator监控数据
          service-host: localhost
          service-port: 8080
        # 开启注册重试,避免启动顺序问题导致首次注册失败
        auto-registration: true
        register-on-application-ready: true
management:
  endpoints:
    web:
      exposure:
        # 开放所有actuator端点,供SBA拉取完整监控数据
        include: "*"
  endpoint:
    health:
      show-details: always

落地注意事项

  • 严禁直接将server.port修改为8081,否则会导致原有业务应用的端口被替换,必须通过新增Tomcat连接器的方式拆分两个端口的服务
  • 端口隔离过滤器是必加项,缺少该过滤器会导致8080业务端口可直接访问SBA控制台,无访问隔离效果
  • 版本需严格匹配:Spring Boot 2.3.4.RELEASE对应SBA 2.3.0版本,跨版本搭配会出现类加载冲突、接口不兼容等启动报错问题
  • 若出现实例注册失败,优先检查客户端配置的注册地址是否指向8081端口,确认本地防火墙未拦截8081端口的本地请求

内容的提问来源于stack exchange,提问作者Allen4Tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 16:15:03