предисловие
В этой статье в основном рассказывается об использовании Swagger интеграции SpringBoot (среда создания документов API) и Actuator интеграции SpringBoot (мониторинг проекта).
SpringBoot интегрирует Swagger
Примечание. Если вы хотите получить проект напрямую, вы можете сразу перейти к нижней части и загрузить код проекта по ссылке.
Введение в Swagger
Swagger — это набор инструментов с открытым исходным кодом, созданных на основе спецификации OpenAPI, которые могут помочь нам в разработке, создании, документировании и использовании API Rest. Swagger в основном включает следующие три части:
- Редактор Swagger: редактор на основе браузера, с помощью которого мы можем написать нашу спецификацию OpenAPI.
- Пользовательский интерфейс Swagger: он преобразует спецификацию OpenAPI, которую мы пишем, в интерактивный документ API.Позже я буду использовать браузер для просмотра и работы с нашим Rest API.
- Swagger Codegen: упрощает процесс сборки за счет создания серверных заглушек и клиентских SDK для любого API, определенного спецификацией OpenAPI (ранее Swagger).
Плюсы и минусы Swagger
преимущество
- Простой в использовании пользовательский интерфейс Swagger предоставляет очень хороший интерфейс API-интерфейса, который может выполнять вызовы API-интерфейса различными способами.
- Своевременность и ремонтопригодность хороши, а документация по API меняется вместе с изменениями кода. Swagger генерирует документы API на основе аннотаций, и мы можем изменить соответствующие аннотации при изменении кода.
- Легко тестировать, вы можете импортировать спецификации документов в соответствующие инструменты (такие как SoapUI), которые автоматически создадут для нас автоматизированные тесты.
недостаток
- Повторное использование бедных, потому что, в конце концов, открывается страница Swager, делая тест интерфейса времени, многие параметры не могут быть сохранены, его не легко повторно сохранить.
- Сложные сценарии смоделировать непросто, например, если вы используете аутентификацию по токену, вам может потребоваться каждый раз имитировать вход в систему, а затем выполнять вызов интерфейса.
Однако указанные выше недостатки на самом деле безобидны и могут сочетаться сPostmanПриходите и используйте его вместе! Почтальон может сохранять параметры и постоянно генерировать файлы, сохранять информацию о токене в заголовке, динамически генерировать цифровые подписи и т. д. Если вам интересно, вы можете ознакомиться с этой статьей, которую я написал ранее. адрес:Учебник почтальона
Адрес, связанный с Swagger
- Официальный сайт Swagger:swagger.io
- Адрес Swagger на GitHub:github.com/swagger-api
подготовка к разработке
Требования к окружающей среде
JDK: 1,8
SpringBoot: 1.5.9.ВЫПУСК
Прежде всего, связанные зависимости Maven:
pom.xmlФайлы следующие:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>test</scope>
</dependency>
<!-- swagger RESTful API -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
</dependencies>
Примечание:Пакет jar Swagger может быть либо собственным пакетом полки Swagger, либо пакетом полки Swagger, который был интегрирован SpringBoot в хранилище maven.
application.properties
Конфигурация файла такая же, как и у обычного проекта SpringBoot.
написание кода
Использование Swagger в SpringBoot на самом деле очень просто, просто добавьте его при запуске.@EnableSwagger2
Прокомментируйте, а затем используйте@Bean
Аннотация может инициализировать некоторые соответствующие конфигурации, такие как редактирование информации пользовательского интерфейса Swagger, указание пакета, за сканирование которого отвечает Swagger, и так далее.
Конфигурация кода Swagger выглядит следующим образом:
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.pancm"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("测试")
.termsOfServiceUrl("http://www.panchengming.com/")
.contact("xuwujing")
.version("1.0")
.build();
}
}
Поскольку Swagger в основном используется для создания документов API, здесь мы можем напрямую написать соответствующий код уровня управления, игнорируя написание кода, относящегося к уровню службы и уровню Dao. Здесь мы сначала пишем класс сущности.
класс сущности
Еще одна универсальная пользовательская таблица
public class User {
private Long id;
private String name;
private Integer age;
//getter 和 setter 略
}
Уровень управления контроллером
Основное использование Swagger — контроль над этой землей, то есть предоставление документации API для интерфейса с помощью некоторых примечаний. Следующие аннотации кода в основном используются для двух@ApiOperation
а также@ApiImplicitParam
эти двое,@ApiOperation
Аннотации для добавления описаний в API и передачи@ApiImplicitParams
Аннотации для добавления описаний к параметрам, гдеvalue
это название,notes
является подробным описанием.
Ниже приведены некоторые аннотации Swagger.Более подробную информацию вы можете найти в официальной вики-документации.
- @Api: пометьте класс как ресурс Swagger.
- @ApiImplicitParam: представляет один параметр в операции API.
- @ApiImplicitParams: оболочка, которая позволяет отображать несколько объектов ApiImplicitParam.
- @ApiModel: предоставляет дополнительную информацию о модели Swagger, например описание объектов POJO.
- @ApiModelProperty: добавление и управление данными для свойств модели.
- @ApiOperation: описывает операцию по определенному пути или обычно методу HTTP.
- @ApiParam: добавьте дополнительные метаданные для параметров действия.
- @ApiResponse: описывает возможные ответы на операцию.
- @ApiResponses: оболочка, которая позволяет отображать несколько объектов ApiResponse.
- @Authorization: объявите схему авторизации, которая будет использоваться для ресурса или операции.
- @AuthorizationScope: описывает область авторизации OAuth2.
- @ResponseHeader: представляет заголовок, который может быть предоставлен как часть ответа.
- @ApiProperty: описывает значение свойства в объекте POJO.
- @ApiError : информация, возвращаемая ошибкой интерфейса.
- ...
Официальный адрес вики-документа:GitHub.com/swagger-API…
Код уровня управления выглядит следующим образом:
@RestController
@RequestMapping(value = "/api")
public class UserRestController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@ApiOperation(value="创建用户", notes="根据User对象创建用户")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@PostMapping("/user")
public boolean insert(@RequestBody User user) {
logger.info("开始新增用户信息!请求参数:{}",user);
return true;
}
@ApiOperation(value="更新用户", notes="根据User对象更新用户")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@PutMapping("/user")
public boolean update(@RequestBody User user) {
logger.info("开始更新用户信息!请求参数:{}",user);
return true;
}
@ApiOperation(value="删除用户", notes="根据User对象删除用户")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@DeleteMapping("/user")
public boolean delete(@RequestBody User user) {
logger.info("开始删除用户信息!请求参数:{}",user);
return true;
}
@ApiOperation(value="获取用户列表", notes="根据User对象查询用户信息")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@GetMapping("/user")
public User findByUser(User user) {
logger.info("开始查询用户列表,请求参数:{}",user);
User user2 =new User();
user2.setId(1L);
user2.setAge(18);
user2.setName("xuwujing");
return user2;
}
}
Запись приложения
Это в основном то же самое, что и обычный проект SpringBoot.
код показывает, как показано ниже:
@SpringBootApplication
public class SwaggerApplication {
private static final Logger logger = LoggerFactory.getLogger(SwaggerApplication.class);
public static void main(String[] args) {
SpringApplication.run(SwaggerApplication.class, args);
logger.info("Swagger程序启动成功!");
}
}
функциональный тест
После того, как успешно запустим программу, вводим в браузере:http://localhost:8183/swagger-ui.html
, вы можете увидеть интерфейс Swagger.
Пример интерфейса выглядит следующим образом:
Поскольку работа Swagger в основном связана с интерфейсом, будет убедительнее использовать картинки.
Примерная схема использования GET-запроса для тестирования выглядит следующим образом:
SpringBoot интегрирует привод
Примечание. Если вы хотите получить проект напрямую, вы можете сразу перейти к нижней части и загрузить код проекта по ссылке.
Введение в привод
По сути, Actuator привносит в наше приложение готовые к работе функции. Мониторинг нашего приложения через эту зависимость, сбор метрик, понимание состояния трафика или баз данных становится тривиальным. Основное преимущество этой библиотеки заключается в том, что мы можем получить инструменты производственного уровня, фактически не реализуя эти функции самостоятельно. Actuator в основном используется для предоставления оперативной информации о запущенном приложении — работоспособности, метриках, информации, дампах, env и т. д. Он использует конечные точки HTTP или компоненты JMX, чтобы мы могли с ним взаимодействовать. Как только эта зависимость находится в пути к классам, несколько конечных точек доступны из коробки. Как и большинство модулей Spring, мы можем легко настроить или расширить его несколькими способами.
Меры предосторожности
Версия Actuator 1.x сильно отличается от версии 2.x.В этой статье представлена версия 1.x.
Актуатор теперь не зависит от технологии, тогда как в 1.x он был привязан к MVC и, следовательно, к API сервлетов. В версии 2.x Actuator определяет свою модель, подключаемую и расширяемую, не полагаясь на MVC. Таким образом, с помощью этой новой модели мы можем использовать MVC и WebFlux в качестве базовых веб-технологий. Кроме того, будущие технологии могут быть добавлены путем внедрения правильных адаптеров. Наконец, JMX по-прежнему поддерживает предоставление конечных точек без дополнительного кода.
Приведенные выше инструкции относятся к официальному сайту Actuator.
Адрес официального сайта:Woohoo.Принеси арлингтонского терьера.com/spring-boot…
подготовка к разработке
Требования к окружающей среде
JDK: 1,8
SpringBoot: 1.5.9.ВЫПУСК
Прежде всего, связанные зависимости Maven:
pom.xmlФайлы следующие:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>test</scope>
</dependency>
</dependencies>
Затем есть конфигурация файла application.yml, Конфигурация здесь в основном предназначена для указания отслеживаемого порта и пути, закрытой аутентификации безопасности и т. д.
application.yml:
server:
port: 8181
management:
security:
enabled: false
port: 8888
context-path: /monitor
endpoints:
shutdown:
enabled: true
info:
app:
name:springboot-actuator
version:1.0
написание кода
На самом деле этот блок не требует написания кода, потому что от вас требуется только добавить зависимость в проект и настроить его для ее использования. Здесь мы создаем общий проект SpringBoot и добавляем зависимости Actuator, а затем мы можем получить соответствующую информацию, вызывая некоторые интерфейсы, предоставляемые Actuator. Вот некоторые описания этих интерфейсов:
1./autoconfig может получить эффективную информацию о конфигурации 2. /configprops может получить содержимое и значение свойства по умолчанию. 3. /beans может получить псевдоним компонента, тип, синглтон, адрес класса, зависимости и другую информацию. 4. /dump может получить такую информацию, как имя потока, идентификатор потока, статус потока, ожидать ли блокировки ресурсов и т. д. 5. /env может получить такую информацию, как переменные среды, свойства JVM, параметры командной строки, пакеты jar, используемые проектом, и т. д. 5.1 /sun.boot.library.path может получить путь установки JDK 6. /health может получить такую информацию, как обнаружение диска и обнаружение базы данных 7. /mappings может получить все пути URI и их сопоставления с контроллерами. 8. /metrics может получить информацию об использовании контента JVM, ситуации с GC, информации о загрузке классов. 8.1 /gc.* может получить информацию, связанную с сборщиком мусора 8.2 /mem.* может получить информацию о памяти... 9. /info может получить индивидуальную информацию о конфигурации 10. /shutdown можно использовать для закрытия запроса программы после публикации. 11. /trace может получить подробную информацию обо всех веб-запросах 12 ....
Дополнительные инструкции по настройке можно найти в официальной документации! Если это недостаточно ясно для просмотра данных, возвращаемых информацией интерфейса, вы можете просмотреть диаграмму преобразования в сочетании с SpringCloud Hystrix-Dashboard. Для конкретного использования см.:SpringCloud Learning Series Three ----- автоматический выключатель (Hystrix) и мониторинг автоматического выключателя (Dashboard)Эта статья.
функциональный тест
После того, как мы успешно запустили программу, мы ее протестируем.
Сначала проверьте журнал запуска, вы обнаружите, что запущены два порта, один из которых является портом самого проекта Springboot, а другой — портом, отслеживаемым Actuator.
пример графика:
Предоставленный извне Actuator в основном помогает нам получить информацию о некоторых программах и некоторых средах.
Например, получить статус работоспособности программы. Введите в браузере:
смотреть.
пример графика:
Конечно, вы также можете настроить некоторые сведения о программе, такие как определение версии программы.
Введите в браузере:
пример графика:
разное
адрес проекта
SpringBoot интегрирует адрес проекта проекта Swagger:GitHub.com/nihilty/tickets…
SpringBoot интегрирует адрес проекта Actuator:GitHub.com/nihilty/tickets…
Адрес всей коллекции SpringBoot:GitHub.com/nihilty/tickets…
Статьи из серии SpringBoot Integration
-
Чтение конфигурационных файлов SpringBoot и использование фильтров и перехватчиков
-
Springboot + MyBatis + Druid + PageHelper реализует несколько источников данных и пейджинг
-
Интеграция SpringBoot для совместимости с несколькими версиями ElasticSearch
-
SpringBoot интегрирует Netty и использует Protobuf для передачи данных.
-
SpringBoot интегрирует Redis и использует стиль Restful для реализации функций CRUD.
-
Проект SpringBoot реализует загрузку файлов и отправку электронной почты
музыкальная рекомендация
Оригинал не просто, если вы чувствуете себя хорошо, я надеюсь дать рекомендацию! Ваша поддержка - самая большая мотивация для моего письма! Уведомление об авторских правах: Автор: ничтожество Источник блога сада:www.cnblogs.com/xuwujingИсточник CSDN:blog.csdn.net/qazwsxpcm Источник личного блога:www.panchengming.com