入门

1. 配置SBA服务端应用程序

第一步,你需要配置你的服务端程序。 为此,只需要配置一个基础的boot项目(使用 http://start.spring.io 生成脚手架)。 由于Spring Boot Admin Server同时支持servlet和webflux,所以你需要在其中进行选择,并添加对应的Spring Boot Starter。 在本例中,我们使用servlet作为web starter。

  1. 将Spring Boot Admin Server的starter添加到你的依赖中:

    pom.xml
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.6.6</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    xml

如果你使用的是Spring Boot Admin Server的snapshot版本,那么可能还需要添加spring的sonatype snapshot仓库:

pom.xml
<repositories>
    <repository>
        <id>spring-milestone</id>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://repo.spring.io/milestone</url>
    </repository>
    <repository>
        <id>spring-snapshot</id>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>http://repo.spring.io/snapshot</url>
    </repository>
    <repository>
        <id>sonatype-nexus-snapshots</id>
        <name>Sonatype Nexus Snapshots</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>
xml
  1. 在main class上添加`@EnableAdminServer`注解,启用SBA服务器端配置:

    @Configuration
    @EnableAutoConfiguration
    @EnableAdminServer
    public class SpringBootAdminApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootAdminApplication.class, args);
        }
    }
    java
如果你想通过部署war包,以servlet容器的方式来设置SBA,那么请查看 spring-boot-admin-sample-war

同时也看看 spring-boot-admin-sample-servlet, 其中添加了安全保护。

2. 注册客户端应用程序

要想在SBA服务端注册你的应用,你需要引入SBA客户端,或者是使用 Spring Cloud服务发现 (例如 Eureka、Consul等等)。 这里有一个 在SBA服务端使用静态配置的简单选项

2.1. SBA客户端服务

所有要注册的应用都需要添加Spring Boot Admin客户端依赖。 如果要想对默认接口进行安全保护,还需要添加 spring-boot-starter-security 依赖。

  1. 添加spring-boot-admin-starter-client依赖:

    pom.xml
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.6.6</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    xml
  2. 配置Spring Boot Admin服务端的URL来开启SBA客户端:

    application.properties
    spring.boot.admin.client.url=http://localhost:8080  (1)
    management.endpoints.web.exposure.include=*  (2)
    management.info.env.enabled=true (3)
    1 将要注册到的Spring Boot Admin 服务端URL地址。
    2 与Spring Boot 2一样,大部分默认接口都没有通过http暴露出来,这里我们将它们全部暴露。在生产环境,您应该酌情选择您要公开的接口。
    3 在Spring Boot 2.6版本之后,env信息默认是关闭的。所以我们必须启用它们。
  3. 让所有的actuator接口都可以访问:

    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()  (1)
                .and().csrf().disable();
        }
    }
    java
    1 为了演示的简单,我们禁用了安全功能。请查看 安全处理章节 来学习如何保护您的接口。

2.2. Spring Cloud 服务发现

如果已经在应用中使用了Spring Cloud Discovery,那么就不需要SBA客户端了。 只需要为Spring Boot Admin服务端添加一个DiscoveryClient,其余的工作都会由我们自动配置完成。

下面的步骤中我们使用的是Eureka,但是其它的Spring Cloud Discovery实现也都支持的很好。 这里就有一些使用 ConsulZookeeper 的例子。

另外,也参考一下 Spring Cloud 文档

  1. 在依赖中添加spring-cloud-starter-eureka:

    pom.xml
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    xml
  2. 在配置类中添加 @EnableDiscoveryClient 注解以启用服务发现:

    @Configuration
    @EnableAutoConfiguration
    @EnableDiscoveryClient
    @EnableScheduling
    @EnableAdminServer
    public class SpringBootAdminApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootAdminApplication.class, args);
        }
    
        @Configuration
        public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
            @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.authorizeRequests().anyRequest().permitAll()  (1)
                    .and().csrf().disable();
            }
        }
    }
    java
    1 为了演示的简单,我们禁用了安全功能。请查看 安全处理章节 来学习如何保护您的接口。
  3. 告诉Eureka客户端在哪里查找服务:

    application.yml
    eureka:   (1)
      instance:
        leaseRenewalIntervalInSeconds: 10
        health-check-url-path: /actuator/health
        metadata-map:
          startup: ${random.int}    #needed to trigger info and endpoint update after restart
      client:
        registryFetchIntervalSeconds: 5
        serviceUrl:
          defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
    
    management:
      endpoints:
        web:
          exposure:
            include: "*"  (2)
      endpoint:
        health:
          show-details: ALWAYS
    yml
    1 针对Eureka客户端的配置部分
    2 与Spring Boot 2一样,大部分默认接口都没有通过http暴露出来,这里我们将它们全部暴露。在生产环境,您应该酌情选择您要公开的接口。

另外,也参考一下 spring-boot-admin-sample-eureka

你也可以将Spring Boot Admin服务端安装在Eureka服务端上。首先将前文的安装步骤重复一遍,然后将 spring.boot.admin.context-path 设置为除了 "/" 之外的其它路径,这样Spring Boot Admin服务端的用户交互页面就不会和Eureka的冲突了。

2.3. 使用Pyctuator注册Python应用程序

使用 Pyctuator,您可以轻松的将Spring Boot Admin与 Flask 或者是 FastAPI 轻松的集成在一起。

下面的例子使用的是Flask,但是其它web框架也支持的很好。 有关框架的更新列表以及所支持的功能,请查看Pyctuator官方文档。

  1. 安装pyctuator包:

    pip install pyctuator
    bash
  2. 将pyctuator指向你的Flask应用,让它知道Spring Boot Admin是在哪里运行的,从而启用pyctuator:

    import os
    from flask import Flask
    from pyctuator.pyctuator import Pyctuator
    
    app_name = "Flask App with Pyctuator"
    app = Flask(app_name)
    
    
    @app.route("/")
    def hello():
        return "Hello World!"
    
    
    Pyctuator(
        app,
        app_name,
        app_url="http://example-app.com",
        pyctuator_endpoint_url="http://example-app.com/pyctuator",
        registration_url=os.getenv("SPRING_BOOT_ADMIN_URL")
    )
    
    app.run()
    python

有关更多的详细信息和示例,请查看Pyctuator的 官方文档 以及 官方示例