Конечные точки Spring Boot Actuator
Конечные точки Spring Boot Actuator позволяют нам отслеживать наше приложение и взаимодействовать с ним. Spring Actuator — это подмодуль Spring Boot, предоставляющий встроенные конечные точки, которые мы можем включать и отключать для нашего приложения.
Конечные точки Spring Boot Actuator
Конечные точки Spring Boot Actuator доступны через JMX и HTTP, в большинстве случаев мы используем конечные точки Actuator на основе HTTP, потому что к ним легко получить доступ через браузер, команду CURL, сценарии оболочки и т. д. Некоторые из полезных конечных точек привода:
- beans: эта конечная точка возвращает список всех bean-компонентов, настроенных в нашем приложении.
- env: предоставляет информацию о свойствах Spring Environment.
- здоровье: показывает работоспособность приложения.
- info: отображает информацию о приложении, мы можем настроить это в свойствах среды Spring.
- mappings: отображает список всех путей @RequestMapping.
- shutdown: позволяет корректно завершить работу приложения.
- threaddump: предоставляет дамп потока приложения.
Вы можете получить полный список конечных точек пружинного привода здесь.
Безопасность конечных точек Spring Actuator
Только конечные точки «здоровье» и «информация» выставляются без какой-либо безопасности, для доступа ко всем остальным конечным точкам нам нужно настроить наше приложение для обеспечения безопасности spring. Этого очень легко добиться, мы вернемся к этому в более поздней части урока.
Включить конечные точки Spring Actuator
Когда мы добавляем зависимости Spring Actuator в наш проект Spring Boot, он автоматически включает конечные точки привода. Добавьте приведенные ниже зависимости в ваше приложение Spring, чтобы включить конечные точки привода Spring Boot.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Теперь, когда вы запустите приложение, вы увидите, что конечные точки привода отображаются в журналах.
2018-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
Настройка базового пути конечных точек привода
По умолчанию базовый путь конечных точек привода равен /actuator
, мы можем изменить его на любое другое значение, установив management.endpoints.web.base-path
в файле свойств приложения.
management.endpoints.web.base-path=/management
Разоблачение других конечных точек актуатора
Мы можем включать и отключать другие конечные точки привода через файлы свойств. Если вы хотите включить все конечные точки привода, добавьте следующее свойство.
management.endpoints.web.exposure.include=*
Чтобы включить только определенные конечные точки привода, укажите список идентификаторов конечных точек.
management.endpoints.web.exposure.include=health,info,beans,env
Spring Security для конечных точек актуатора
Обратите внимание, что нам нужно добавить Spring Security в наше приложение для включения дополнительных конечных точек, потому что всем другим конечным точкам требуется как минимум базовая аутентификация. Добавьте следующую зависимость для весенней безопасности в вашем приложении.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Кроме того, добавьте имя пользователя и пароль безопасности spring в файл свойств приложения.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
Перезапустите приложение, и вы увидите сопоставление дополнительных конечных точек.
2018-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Пользовательские конечные точки Spring Actuator
Одной из замечательных особенностей Spring Framework является то, что его очень легко расширять. Мы можем создать свои собственные конечные точки привода, используя аннотацию @Endpoint
в классе. Затем мы должны использовать аннотации @ReadOperation
, @WriteOperation
или @DeleteOperation
для методов, чтобы представить их как bean-компонент конечной точки привода. Мы можем создавать конечные точки для конкретных технологий, используя аннотации @JmxEndpoint
и @WebEndpoint
. Вот пример нашей собственной конечной точки пружинного привода.
package com.journaldev.spring;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {
@ReadOperation
@Bean
public String hi() {
return "Hi from custom endpoint";
}
}
Вы заметили идентификатор конечной точки? Нам также необходимо настроить это в списке конечных точек привода, которые будут включены. Обновите следующие свойства в файле application.properties
.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
Теперь, когда вы запустите приложение, проверьте, отображается ли эта новая конечная точка в журналах.
2018-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Резюме
Spring Boot Actuator — это готовый к производству модуль управления и информации. Мы можем легко расширить его, добавив собственные API и управляя нашим приложением.
Вы можете загрузить полный проект из нашего репозитория GitHub.