Spring执行器端点在应用程序端口上不工作

idfiyjo8  于 2023-05-05  发布在  Spring
关注(0)|答案(5)|浏览(133)

我试图在与应用程序端口相同的端口上启用执行器端点(application.properties由server.port=8080在www.example.com文件中指定),但由于某种原因,它不起作用。当我运行应用程序时,我可以从应用程序中获得响应,但不能从执行器端点中获得响应。我可以看到日志中提到端点暴露在基本路径'/actuator'下,如下面的屏幕截图所示。但是当我尝试点击执行器的URL时,它给出了404。
URL,无法使用

但是,如果我在www.example.com中application.properties为属性为(management.server.port=9000)的执行器端点指定一个单独的端口,那么它可以正常工作。
URL,这是工作

唯一的区别是关于端口号,但从我在spring文档中阅读的内容来看,如果我们不指定management. server. port,则默认情况下应在应用程序端口上启用执行器端点。有人能解释一下我错过了什么吗?x1c 0d1x PS:应用程序运行日志完全相同,无论是否指定management.server.port,因此,这一个截图没有指定管理端口。另外,我尝试为两个属性(server.port和management.server.port)提供相同的端口号,但出现了相同的问题。应用程序在该端口上工作,但执行器端点不工作。我使用的是spring-boot版本2.0.6
以下是我的www.example.com文件的内容application.properties:

camel.springboot.main-run-controller=true
camel.springboot.name=AppName
camel.rest.data-format-property.prettyPrint=false
camel.component.servlet.mapping.context-path=/*

server.port=8080
management.server.port=9000

management.endpoint.health.show-details=always
management.endpoint.beans.enabled=true

logging.level.org.springframework = INFO
logging.level.org.apache.camel.spring.boot = INFO
logging.level.org.apache.camel.impl = DEBUG

下面是pom.xml中的依赖项:

<dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
        </dependency>

        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-servlet-starter</artifactId>
        </dependency>
</dependencies>
bxjv4tth

bxjv4tth1#

关于 Spring Boot 致动器文档
通过使用默认HTTP端口公开管理端点是基于云的部署的明智选择。但是,如果您的应用程序在您自己的数据中心内运行,您可能更愿意使用不同的HTTP端口来公开端点。
它使用默认HTTP端口(其为8080)为致动器服务。我做了一个快速检查,可以用Sping Boot 2.1.X和2.2.X确认这一点。
尝试从配置中删除management.port,如果这不起作用,那么问题可能来自应用程序中的额外(自定义)配置。

xmakbtuz

xmakbtuz2#

请在www.example.com文件中设置以下内容application.properties

management.endpoints.enabled-by-default=true 

management.endpoints.web.exposure.include=*
vwhgwdsa

vwhgwdsa3#

删除management.server.port=9000,此属性将覆盖server.port=8080

oxiaedzo

oxiaedzo4#

我也遇到了同样的问题,对我来说,导致这个问题的原因是我为camel声明的上下文和用于spring actuator的上下文之间的冲突。
所以,在application.yml中,我有这三个上下文:

server: servlet: context-path: myservercontext/v1
camel: component: servlet: mapping: contextPath: /*
management: endpoints: web: base-path: "/"

我认为在请求到达服务器后,它会迷失在这种模糊性中,所以我通过将这些上下文更改为:

server: servlet: context-path: myservercontext/v1
camel: component: servlet: mapping: contextPath: /camel/*
management: endpoints: web: base-path: "/"

这对我来说很好,因为我所有的资源都被分组在“/camel”下,但当我测试时,我发现这也很有效:

server: servlet: context-path: myservercontext
camel: component: servlet: mapping: contextPath: /v1/*
management: endpoints: web: base-path: "/"

请注意,在最后一个场景中,健康路径不会位于“v1”之下。
如果不是这个问题,我永远不会找出这个问题的原因,即使它还没有解决,所以我非常感谢你发布这篇文章,希望我的解决方案能帮助其他人^^

hxzsmxv2

hxzsmxv25#

服务器和管理配置示例

下面是一个示例配置。
您可以有一个单独的服务器端口和一个用于管理的执行器将运行。例如,您可以使用port 8001作为SERVER端口,也可以使用port 8000作为MANAGEMENT端口。
我将使用applications.properties文件格式作为我的答案。如果使用application.yml,请相应更新

# SERVER CONFIGURATION
server.port=8001
# Server - Compression :
server.compression.min-response-size=2KB
server.compression.enabled=true
server.compression.mime-types=text/html,text/css,text/csv,text/javascript,text/markdown,text/plain
# Server - Error handling :
server.error.include-binding-errors=on_param
server.error.include-exception=true
server.error.include-message=on_param
server.error.include-stacktrace=on_param
server.error.whitelabel.enabled=true
server.error.path=/error
# Server - Session :
server.servlet.encoding.charset=utf-8
server.servlet.session.tracking-modes=cookie
server.servlet.session.cookie.max-age=30
server.servlet.session.cookie.secure=true
server.servlet.session.cookie.name=cookie_session_duesclerk
#
#
# MANAGEMENT CONFIGURATION
management.server.port=8000
springdoc.use-management-port=true
management.endpoints.enabled-by-default=true
management.server.base-path=/management
management.server.ssl.enabled=false
management.endpoints.web.exposure.include= health, openapi, swaggerui
#

请注意自定义管理路径/management

management.server.base-path=/management

您可以根据需要删除/保留此选项

相关问题