#java #spring #spring-boot #spring-boot-actuator #spring-micrometer
#java #spring #spring-boot #spring-boot-actuator #spring-микрометр
Вопрос:
У меня есть приложение Spring Boot, полное конечных точек (т. Е. @Controller
‘s) и @Service
‘s с @Repository
‘s за ними. Я бы хотел, чтобы все они экспортировали временные показатели в Micrometer. В какой-то момент я бы тоже хотел отключить их все. В какой-то момент мне нужно будет измерить, например, все методы @Service
помеченных классов или измерить время @Repository
‘s. Поэтому мне не нравятся все классы, которые уже содержат @Service
аннотации для @Timed
вставки и удаления, и я должен понять, как это сделать с интерфейсами Spring Data для репозиториев.
Какие компоненты я должен настроить, чтобы MeterRegistry
учесть, что весь @RestController
помеченный код уже имеет @Timed
аннотации, чтобы сделать эту конфигурацию легко включаемой и отключаемой? свойство? Я знаю, что для входящего http-запроса management.metrics.web.server.request.autotime.enabled=true
этот трюк для получения времени входящего http-запроса сработает для меня.
Тем не менее, то же самое, вероятно, я хотел бы применить к уровню сервиса и хранилища, если это возможно. Но нет способа определить, что на самом деле является сервисом, а не @Service
аннотацией. Так как я не люблю добавлять @Timed
их явно, какую настройку можно выполнить, чтобы заставить MeterRegistry
учитывать любой метод в @Service
помеченном классе и в любом хранилище данных Spring в приложении?
Ответ №1:
Для этого нет готового решения, но вы можете реализовать его самостоятельно, например, с помощью Spring AOP.
Вы можете просмотреть исходный код TimedAspect, особенно в @Around
aspect для @Timed
аннотации, и воссоздать его для @Service
или @Repository
.