Привод Spring Boot 2 / работоспособность и /info возвращает HTTP 404

#java #spring #spring-boot #spring-boot-actuator

#java #spring #spring-boot #привод spring-boot-

Вопрос:

Я добавил зависимости в pom.xml совершенно новое приложение Spring Boot, как описано в документации Spring

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

и добавил следующие свойства к application.yml , чтобы просто предоставить /health и /info конечные точки

 management:
  endpoints:
    web:
      exposure:
        include:
          - info
          - health
      jmx:
        exposure:
          exclude: "*"
  endpoint:
    info:
      enabled: true
    health:
      enabled: true
  

но не может достичь указанных конечных точек при запуске приложения через localhost:8080/health и localhost:8080/info — есть ответ HTTP 404.

Я что-то упускаю? Заранее благодарим вас за помощь!

Комментарии:

1. если ваше приложение выполняется на localhost:8080/ (без контекстного пути), оно должно работать / трудно сказать, чего не хватает… конфигурация соответствует значениям по умолчанию / может быть опущена, за исключением той jmx части, которая, похоже, также имеет плохой отступ (по крайней мере, в сообщении).

2. Я думаю, что URL-адрес должен быть localhost:8080/your_context_path/actuator/health

3. @RebaiAhmed вы совершенно правы! наконец, я нашел это в spring.io/guides/gs/actuator-service . Если вы хотите — укажите это в отдельном ответе, чтобы я мог пометить как решение, или я отвечу сам в противном случае. Спасибо!

4. Вы можете сделать это своим ответом 🙂 @DmitryAdonin

Ответ №1:

Существуют две возможные конфигурации, которые могут изменить конечные точки привода / работоспособности и / info:

Во-первых, сервер spring boot mvc, предположим, что у вас это так:

 server:
   port: 8080
   servlet:
      context-path: /test
  

Во-вторых, сервер управления приводом:

 management:
  server:
  #port: #don't change it, then the port for actuator will be the same as server.port above
  endpoints:
     web:
       base-path: /actuator  #the default value for sring boot 2.x is /actuator, even you don't specify it, don't forget to include this in the URL
       exposure:
          include: "*"
  endpoint:
     health:
       show-details: always
  

Таким образом, правильные URL-адреса для доступа к Actuator должны быть :

 http://localhost:8080/test/actuator/info

http://localhost:8080/test/actuator/health
  

В целом шаблон URL для посещения конечных точек привода должен быть:

 http://localhost:{server.port}/{server.servlet.context-path}/{management.endpoints.web.base-path}/**
  

Вы можете сравнить свои конфигурации с этим примером, чтобы увидеть, что вызывает ошибку 404.

Комментарии:

1. @Qui Zhou вы совершенно правы! наконец, я нашел это в spring.io/guides/gs/actuator-service немного странно, что это не было упомянуто в docs.spring.io/spring-boot/docs/current/reference/html /…

2. Рад, что вы решили проблему! На самом деле я узнал об этом, прочитав документ Spring Boot Actuator: готовые к производству функции (на самом деле он использовал префикс /actuator), а затем выполнил некоторые действия, чтобы проверить это.

3. Еще один момент, который следует отметить, заключается в том, что путь по умолчанию к конечной точке привода будет отличаться в зависимости от того, используется ли spring boot 1.X или 2.X. Например, в 1.X конечной точкой работоспособности привода по умолчанию является просто [context-root]/health , в то время как в 2.X путь является [context-root]/actuator/health .

4. @sandboxbohemian Хорошая мысль! Это потому, что в spring boot 1.x значение по умолчанию для management.endpoints.web.base-path равно /