SpringBootэто упроститьSpringПродукт, рожденный из ряда проблем, таких как создание приложений, работа, отладка и развертывание.自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程
actuatorдаspring bootОчень мощная функция в проекте помогает контролировать и управлять приложениями черезrestful apiЗапросы на надзор, аудит и сбор работы приложения, что является незаменимым звеном для микросервисов...
Endpoints
actuatorОсновная часть , которая используется для мониторинга приложений и взаимодействий,spring-boot-actuatorОн построил многоEndpoints(health、info、beans、httptrace、shutdown等等), а также позволяет нам расширять наши собственные конечные точки
Spring Boot 2.0Конечные точки сильно отличаются от предыдущих версий, поэтому при их использовании нужно быть внимательным. Кроме того, механизм мониторинга конечных точек также сильно отличается, его включение не означает, что к нему можно получить прямой доступ, и его нужно выставлять напоказ.management.securityАдминистрация помечена как устаревшая.
Встроенные конечные точки
| id | desc | Sensitive |
|---|---|---|
auditevents |
Отображает информацию о событиях аудита для текущего приложения. | Yes |
beans |
Отображает полный список примененных Spring Bean-компонентов. | Yes |
caches |
Показать доступную информацию о кеше | Yes |
conditions |
Отображение состояния и информации о приложении класса автосборки | Yes |
configprops |
Показать список всех @ConfigurationProperties | Yes |
env |
Показать свойства в ConfigurableEnvironment | Yes |
flyway |
Отображение информации о миграции базы данных Flyway | Yes |
health |
Отображение информации о работоспособности приложения (отображение только без проверки подлинности).status, сертификат показывает все детали информации) |
No |
info |
Отображение любой информации о приложении (просто напишите info.xxx в файле ресурсов) | No |
liquibase |
Демонстрация миграции базы данных Liquibase | Yes |
metrics |
Отображение информации о метриках текущего приложения | Yes |
mappings |
Показать список всех наборов путей @RequestMapping | Yes |
scheduledtasks |
Показывать запланированные задачи в приложении | Yes |
sessions |
Позволяет извлекать и удалять пользовательские сеансы из хранилищ сеансов, поддерживаемых сеансом Spring. | Yes |
shutdown |
Позволяет приложениям корректно завершать работу (не включено по умолчанию) | Yes |
threaddump |
выполнить дамп потока | Yes |
httptrace |
Показать информацию о трассировке HTTP (по умолчанию отображаются последние 100 обменов HTTP-запросами и ответами) | Yes |
импортировать зависимости
существуетpom.xmlдобавлено вspring-boot-starter-actuatorзависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Меры предосторожности
Если вы хотите посетитьinfoинтерфейс для полученияmavenНе забудьте добавить следующее содержимое в содержимое атрибута
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
конфигурация свойства
существуетapplication.propertiesконфигурация в файлеactuatorСоответствующая конфигурация , гдеinfoАтрибут в начале - это доступinfoРелевантный контент, отображаемый в конечной точке, в частностиSpring Boot2.xСредний, открыт только по умолчаниюinfo、healthДве конечные точки, остальные должны быть настроены сами по себеmanagement.endpoints.web.exposure.includeсвойства для загрузки (сincludeестественно естьexclude, подробно описываться не будет). Если вы хотите управлять конечной точкой индивидуально, вы можете использоватьmanagement.endpoint.端点.enabledсвойство для включения или отключения
# 描述信息
info.blog-url=http://blog.battcn.com
info.author=Levin
info.version=@project.version@
# 加载所有的端点/默认只加载了 info / health
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
# 可以关闭制定的端点
management.endpoint.shutdown.enabled=false
# 路径映射,将 health 路径映射成 rest_health 那么在访问 health 路径将为404,因为原路径已经变成 rest_health 了,一般情况下不建议使用
# management.endpoints.web.path-mapping.health=rest_health
простой тест
Запустите проект, посетитеhttp://localhost:8080/actuator/infoСледующее содержимое означает, что конфигурация прошла успешно.
{
"blog-url": "http://blog.battcn.com",
"author": "Levin",
"version": "0.0.1-SNAPSHOT"
}
Настроить - Фокус
Многие из вышеперечисленных связаны с конфигурацией и некоторыми конечными точками, которые поставляются с ними.В практических приложениях иногда значения по умолчанию не соответствуют нашим требованиям, напримерSpring BootКонечная точка работоспособности по умолчанию, вероятно, будет неудовлетворительной.
Сборка HealthIndicators по умолчанию
Ниже приведены зависимостиspring-boot-xxx-starterпосткорреляцияHealthIndicatorреализация (черезmanagement.health.defaults.enabledсвойства, чтобы отключить их), но настройка вступает в игру, когда вы хотите получить дополнительную информацию...
| название | описывать |
|---|---|
CassandraHealthIndicator |
экзаменCassandraЗапущена ли база данных. |
DiskSpaceHealthIndicator |
Проверьте, недостаточно ли места на диске. |
DataSourceHealthIndicator |
Проверьте, может ли быть установлено соединениеDataSource. |
ElasticsearchHealthIndicator |
экзаменElasticsearchЗапущен ли кластер. |
InfluxDbHealthIndicator |
экзаменInfluxDBЗапущен ли сервер. |
JmsHealthIndicator |
экзаменJMSЗапущен ли агент. |
MailHealthIndicator |
Убедитесь, что почтовый сервер работает. |
MongoHealthIndicator |
экзаменMongoЗапущена ли база данных. |
Neo4jHealthIndicator |
экзаменNeo4jЗапущен ли сервер. |
RabbitHealthIndicator |
экзаменRabbitЗапущен ли сервер. |
RedisHealthIndicator |
экзаменRedisЗапущен ли сервер. |
SolrHealthIndicator |
экзаменSolrЗапущен ли сервер. |
Конечная точка здоровья (первый способ)
выполнитьHealthIndicatorИнтерфейс, в соответствии с вашими потребностями, чтобы определить возвращенный статусUPвсе ещеDOWN, функция проста.
package com.battcn.health;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
/**
* <p>自定义健康端点</p>
*
* @author Levin
* @since 2018/5/24 0024
*/
@Component("my1")
public class MyHealthIndicator implements HealthIndicator {
private static final String VERSION = "v1.0.0";
@Override
public Health health() {
int code = check();
if (code != 0) {
Health.down().withDetail("code", code).withDetail("version", VERSION).build();
}
return Health.up().withDetail("code", code)
.withDetail("version", VERSION).up().build();
}
private int check() {
return 0;
}
}
простой тест
Запустите проект, посетитеhttp://localhost:8080/actuator/healthСледующее содержимое означает, что конфигурация прошла успешно.
{
"status": "UP",
"details": {
"my1": {
"status": "UP",
"details": {
"code": 0,
"version": "v1.0.0"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 100944310272,
"free": 55071866880,
"threshold": 10485760
}
}
}
}
Конечная точка здоровья (второй способ)
наследоватьAbstractHealthIndicatorабстрактный класс, переопределитьdoHealthCheckметод, функция немного более мощная, чем первая, по умолчаниюDataSourceHealthIndicator 、 RedisHealthIndicatorЭто все написано таким образом, и обработка исключений также выполняется в обратном вызове содержимого.
package com.battcn.health;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
/**
* <p>自定义健康端点</p>
* <p>功能更加强大一点,DataSourceHealthIndicator / RedisHealthIndicator 都是这种写法</p>
*
* @author Levin
* @since 2018/5/24 0024
*/
@Component("my2")
public class MyAbstractHealthIndicator extends AbstractHealthIndicator {
private static final String VERSION = "v1.0.0";
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
int code = check();
if (code != 0) {
builder.down().withDetail("code", code).withDetail("version", VERSION).build();
}
builder.withDetail("code", code)
.withDetail("version", VERSION).up().build();
}
private int check() {
return 0;
}
}
простой тест
Запустите проект, посетитеhttp://localhost:8080/actuator/healthСледующее содержимое означает, что конфигурация прошла успешно.
{
"status": "UP",
"details": {
"my2": {
"status": "UP",
"details": {
"code": 0,
"version": "v1.0.0"
}
},
"my1": {...},
"diskSpace": {...}
}
}
определить свою собственную конечную точку
описано вышеinfo,healthобаspring-boot-actuatorВстроенный, чтобы действительно реализовать свои собственные конечные точки, вы должны пройти@Endpoint、 @ReadOperation、@WriteOperation、@DeleteOperation.
Введение аннотации
Другое запрошенное действие, вызванное с отсутствующим обязательным параметром или с параметром, который не может быть преобразован в требуемый тип, метод действия не будет вызываться, а статус ответа будет 400 (неверный запрос).
-
@EndpointУникальный путь для создания rest API -
@ReadOperationЗапрос GET, статус ответа 200, если нет ответа на возвращаемое значение 404 (ресурс не найден) -
@WriteOperationЗапрос POST, статус ответа — 200, если нет ответа на возвращаемое значение 204 (нет содержимого ответа) -
@DeleteOperationЗапрос DELETE, статус ответа 200, если нет ответа на возвращаемое значение 204 (нет содержимого ответа)
package com.battcn.endpoint;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import java.util.HashMap;
import java.util.Map;
/**
* <p>@Endpoint 是构建 rest 的唯一路径 </p>
* 不同请求的操作,调用时缺少必需参数,或者使用无法转换为所需类型的参数,则不会调用操作方法,响应状态将为400(错误请求)
* <P>@ReadOperation = GET 响应状态为 200 如果没有返回值响应 404(资源未找到) </P>
* <P>@WriteOperation = POST 响应状态为 200 如果没有返回值响应 204(无响应内容) </P>
* <P>@DeleteOperation = DELETE 响应状态为 200 如果没有返回值响应 204(无响应内容) </P>
*
* @author Levin
* @since 2018/5/24 0024
*/
@Endpoint(id = "battcn")
public class MyEndPoint {
@ReadOperation
public Map<String, String> hello() {
Map<String, String> result = new HashMap<>();
result.put("author", "Levin");
result.put("age", "24");
result.put("email", "1837307557@qq.com");
return result;
}
}
Как вы думаете, это все сделано, что реальность говорит мнеspring-bootПо умолчанию вы не знаете эту вещь, вы должны объявить ее какBean(видеть主函数)
основная функция
package com.battcn;
import com.battcn.endpoint.MyEndPoint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Levin
*/
@SpringBootApplication
public class Chapter13Application {
public static void main(String[] args) {
SpringApplication.run(Chapter13Application.class, args);
}
@Configuration
static class MyEndpointConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnEnabledEndpoint
public MyEndPoint myEndPoint() {
return new MyEndPoint();
}
}
}
контрольная работа
После завершения подготовки приступайте кChapter13Applicationдоступhttp://localhost:8080/actuator/battcnСледующее содержимое означает, что конфигурация прошла успешно...
{
"author": "Levin",
"age": "24",
"email": "1837307557@qq.com"
}
Суммировать
Справочная документация:docs.spring.IO/весенняя загрузка…
Многие авторитеты писали оSpringBootЕсли есть какие-либо сходства, пожалуйста, потерпите меня.Это руководство основано на последнемspring-boot-starter-parent:2.0.2.RELEASEНаписание, в том числе особенности новой версии, будет представлено вместе...
скажите что-то
- Личный QQ: 1837307557
- battcn open source группа (подходит для новичков): 391619659
- Публичный аккаунт WeChat (приветствуется флирт):
battcn
личный блог:blog.battcn.com/
Полный текстовый код:GitHub.com/Принося боль таланту/Судный день…