Spring Boot 2 пользовательских конечных точек привода
Весна Нуб: ОК. Я начинаю с STS Spring Starter Project / Maven / Java 8 / Spring Boot 2.0 и выбираю зависимости Web и Actuator. Он прекрасно работает и работает и отвечает на http://localhost:8080/actuator/health. Я добавляю "Конечную точку" к основному классу приложения, чтобы она выглядела следующим образом.
package com.thumbsup;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.Selector;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class YourStash11Application {
public static void main(String[] args) {
SpringApplication.run(YourStash11Application.class, args);
}
@Endpoint(id="mypoint")
public class CustomPoint {
@ReadOperation
public String getHello(){
return "Hello" ;
}
}
}
Я пытаюсь включить все в application.properties:
management.endpoints.enabled-by-default=true
management.endpoint.conditions.enabled=true
management.endpoint.mypoint.enabled=true
management.endpoints.web.exposure.include=*
Но когда он собирается, нет ссылки на отображение / привод /mypoint, и
http://localhost:8080/actuator/mypoint и
HTTP: // локальный: 8080 / приложение / MyPoint
оба возвращают 404 ошибки.
Что мне не хватает? Спасибо!
3 ответа
ОК, решил:
@Endpoint(id="mypoint")
@Component
public class myPointEndPoint {
@ReadOperation
public String mypoint(){
return "Hello" ;
}
}
Чего не хватало, так это аннотации @Component. Но где это в документах?
Может быть, это кому-нибудь поможет.
Похоже @ReadOperation
не поддерживает тип возврата Void
, Вы должны вернуть хотя бы пустую строку на ваш invoke
метод.
spring-boot 2.0.3.RELEASE
@Component
@Endpoint(id = "heartbeat")
public class HeartbeatEndpoint {
@ReadOperation
public String invoke() {
return "";
}
}
Первоначально частично проблема заключалась в том, что код не добавил конечную точку без "селектора"
@Endpoint(id = "loggers")
@Component
public class LoggersEndpoint {
@ReadOperation
public Map<String, Object> loggers() { ... }
@ReadOperation
public LoggerLevels loggerLevels(@Selector String name) { ... }
@WriteOperation
public void configureLogLevel(@Selector String name, LogLevel configuredLevel) { ... }
}
Эта конечная точка предоставляет три операции:
GET on / application / loggers: конфигурация всех регистраторов (так как она не имеет параметра "селектор"):
GET on / application / loggers / {name}: конфигурация именованного регистратора (используя имя @Selector).
...
Отредактированный вопрос привел к выводу, что это должен быть боб
Если вы добавляете @Bean, аннотированный с помощью @Endpoint, любые методы, аннотированные с помощью @ReadOperation, @WriteOperation или @DeleteOperation, автоматически отображаются через JMX и, в веб-приложении, также через HTTP. Конечные точки могут быть открыты через HTTP с использованием Jersey, Spring MVC или Spring WebFlux.
Или посмотрите комментарии в объявлении о функции