Поиск по сайту:

Конечные точки Spring Boot Actuator


Конечные точки Spring Boot Actuator позволяют нам отслеживать наше приложение и взаимодействовать с ним. Spring Actuator — это подмодуль Spring Boot, предоставляющий встроенные конечные точки, которые мы можем включать и отключать для нашего приложения.

Конечные точки Spring Boot Actuator

Конечные точки Spring Boot Actuator доступны через JMX и HTTP, в большинстве случаев мы используем конечные точки Actuator на основе HTTP, потому что к ним легко получить доступ через браузер, команду CURL, сценарии оболочки и т. д. Некоторые из полезных конечных точек привода:

  1. beans: эта конечная точка возвращает список всех bean-компонентов, настроенных в нашем приложении.
  2. env: предоставляет информацию о свойствах Spring Environment.
  3. здоровье: показывает работоспособность приложения.
  4. info: отображает информацию о приложении, мы можем настроить это в свойствах среды Spring.
  5. mappings: отображает список всех путей @RequestMapping.
  6. shutdown: позволяет корректно завершить работу приложения.
  7. 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.