SpringBoot 2.0.1 未提供 actuator /refresh

actuator /refresh is not being provided in SpringBoot 2.0.1

我正在为 Spring-Config-ServerSpring-Config-Client 创建一个演示项目。

SpringBoot 1.5.6.RELEASE一切正常。

但是,当我将项目升级到 2.0.1.RELEASE 时,它不提供执行器端点。


执行器端点在1.5.6.RELEASE

中提供
Mapped "{[/refresh || /refresh.json],methods=[POST]}"
Mapped "{[/dump || /dump.json],methods=[GET]
Mapped "{[/heapdump || /heapdump.json],methods=[GET]
Mapped "{[/autoconfig || /autoconfig.json],methods=[GET]
Mapped "{[/resume || /resume.json],methods=[POST]}"
Mapped "{[/configprops || /configprops.json],methods=[GET]
Mapped "{[/features || /features.json],methods=[GET]
Mapped "{[/loggers/{name:.*}],methods=[GET]
Mapped "{[/restart || /restart.json],methods=[POST]}"
...and many more

执行器端点在2.0.1.RELEASE

中提供
Mapped "{[/actuator/health],methods=[GET]
Mapped "{[/actuator/info],methods=[GET]
Mapped "{[/actuator],methods=[GET]

pom.xml : 2.0.1.RELEASE

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RC1</spring-cloud.version>
    </properties>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

bw 1.5.6 pom 的唯一区别是版本和 spring-cloud.version = Dalston.SR2

有人可以帮忙吗?

经过一番研究,我发现 Spring Boot 2.0 中未显示端点的原因是 as per the spring docs

Since Endpoints may contain sensitive information, you should carefully consider when to expose them. The following table shows the default exposure for the built-in endpoints:

所以,我们需要手动公开它们。

我在 application.properties 文件中添加了 management.endpoints.web.exposure.include=*,现在所有执行器端点都通过 HTTP 公开。

注意:如果您使用.yml,请确保使用"*"而不是*

我们还可以使用 属性 management.endpoints.web.exposure.exclude= shutdown,liquibase

排除我们不想公开的执行器

现在可以使用属性配置端点在 HTTP 上的公开

management.endpoints.web.exposure.include
management.endpoints.web.exposure.exclude

您可以通过 Actuator 提到的 ID 公开端点。

# Include all endpoints 
management.endpoints.web.exposure.include=*
# Exclude specifics 
management.endpoints.web.exposure.exclude=env

即使添加以下行,有时也无济于事 management.endpoints.web.exposure.include=*

试试这个:- 刷新适用于 OPTIONS 方法,在少数情况下不适用于 POST 方法。

refresh 可以启用端点以通过网络使用(通过网络公开),在 application.yaml

中使用它
management.endpoints.web.exposure.include: health,info,refresh

Spring 引导默认启用 healthinfo 端点。有必要列出它们以保持启用状态。

如果您的应用程序有这个 URL http://localhost:8181

您可以发送POST请求刷新

http://localhost:8181/actuator/refresh

这就是我所做的。 通过设置

启用所有端点
management.endpoints.web.exposure.include=*

并发送了一个空请求来刷新端点。

curl -d '{}' -H 'Content-Type: application/json' http://localhost:8000/actuator/refresh

URL http://localhost:8000/actuator/ 将列出所有可用的端点。

P.S.: 我的应用程序在端口 8000 上 运行。在默认端口 8080 上,我是 运行 配置服务器。