Руководство по spring boot на русском

Этот урок показывает пример того, как Spring Boot
помогает вам ускорить и облегчить разработку приложений. Из учебных материалов вы увидите случаи
использования Spring Boot. Если вы хотите создать проект на его основе, то посетите
Spring Initializr, заполните
онформацию о проекте, выберите опции и вы сможете загрузить файл сборки Maven, либо Gradle, либо
как проект в виде zip-файла.

Что вы создадите

Вы создадите простое web-приложение с Spring Boot и добавите в него несколько полезных сервисов.

Что вам потребуется

  • Примерно 15 минут свободного времени
  • Любимый текстовый редактор или IDE
  • JDK 6 и выше
  • Gradle 1.11+ или
    Maven 3.0+
  • Вы также можете импортировать код этого урока, а также просматривать web-страницы прямо из
    Spring Tool Suite (STS),
    собственно как и работать дальше из него.

Как проходить этот урок

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

Чтобы начать с нуля, перейдите в Настройка проекта.

Чтобы пропустить базовые шаги, выполните следующее:

  • Загрузите и
    распакуйте архив с кодом этого урока, либо кнонируйте из репозитория с помощью
    Git:
    git clone https://github.com/spring-guides/gs-spring-boot.git
  • Перейдите в каталог gs-spring-boot/initial

Когда вы закончите, можете сравнить получившийся результат с образцом в gs-spring-boot/complete.

Настройка проекта

Для начала вам необходимо настроить базовый скрипт сборки. Вы можете использовать любую систему сборки,
которая вам нравится для сборки проетов Spring, но в этом уроке рассмотрим код для работы с
Gradle и
Maven. Если вы не знакомы ни с одним из них, ознакомьтесь
с соответсвующими уроками Сборка Java-проекта с использованием Gradle
или Сборка Java-проекта с использованием Maven.

Создание структуры каталогов

В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру,
командой mkdir -p src/main/java/hello для *nix систем:

└── src
    └── main
        └── java
            └── hello

Создание файла сборки Gradle

Ниже представлен начальный файл сборки Gradle.
Файл pom.xml находится здесь.
Если вы используете Spring Tool Suite (STS),
то можете импортировать урок прямо из него.

Если вы посмотрите на pom.xml, вы найдете, что указана версия для maven-compiler-plugin.
В общем, это не рекомендуется делать. В данном случае он предназначен для решения проблем с нашей CI системы,
которая по умолчанию имеет старую(до Java 5) версию этого плагина.

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.8.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

dependencies {
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    // end::jetty[]
    // tag::actuator[]
    compile("org.springframework.boot:spring-boot-starter-actuator")
    // end::actuator[]
    testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

Spring Boot gradle plugin
предоставляет множество удобных возможностей:

  • Он собирает все jar’ы в classpath и собирает единое, исполняемое «über-jar», что
    делает более удобным выполнение и доставку вашего сервиса
  • Он ищет public static void main() метод, как признак исполняемого класса
  • Он предоставляет встроенное разрешение зависимостей, с определенными номерами версий для соответсвующих
    Spring Boot зависимостей.
    Вы можете переопределить на любые версии, какие захотите, но он будет по умолчанию для Boot
    выбранным набором версий

Узнайте, что вы можете делать с Spring Boot

Spring Boot предлагает быстрый путь для создания приложений. Он просматривает ваш classpath и
бины, которые вы сконфигурировали, делает предположения о том, что нехватает и добавляет их.
С Spring Boot вы можете сконцентрироваться больше на решении бизнес задач и меньше на инфраструктуру.

К примеру:

  • Требуется Spring MVC? Некоторые определенные бины вам почти всегда необходимы и Spring Boot
    добавит для них автоматически. Spring MVC приложению также необходим сервлет контейнер, поэтому
    Spring Boot автоматически настроит встроенный Tomcat
  • Требуется Jetty? Если так, то скорее всего вам не нужен Tomcat, а вместо него нужен встроенный
    Jetty. Spring Boot обработает эту задачу для вас
  • Требуется Thymeleaf? Для этого несколько бинов должны всегда быть добавлены в контекст вашего приложения;
    Spring Boot добавит их для вас

Это лишь несколько примеров, которые предоставляет автоманическая настройка Spring Boot. В то же
время, Spring Boot не заработает с вашими настройками. Например, если Thymeleaf в вашем classpath,
то Spring Boot добавит SpringTemplateEngine в ваш контекст приложения автоматически.
Но если вы определите свой собственный SpringTemplateEngine с вашими настройками, то
Spring Boot не добавит его. Это останется под вашим контролем и потребует от вас немного усилий.

Spring Boot не генерирует код и не редактирует ваши файлы. Вместо этого, когда вы поднимаете
ваше приложение, Spring Boot динамически инициализирует бины и настройки и применяет их к вашему
контексту приложения.

Создание простого web приложения

Теперь вы можете создать web контроллер для простого web приложения.

src/main/java/hello/HelloController.java

package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

Класс помечен как @RestController, означая, что он готов к использованию Spring MVC
для обработки запросов. RequestMapping соответствует / метода
index(). При вызове из браузера или использовании curl в командной строке, метод
возвращает чистый текст. Т.к. @RestController сочетает в себе @Controller
и @ResponseBody, две аннотации в результате web запросов возвращают данные, а не
представление.

Создание Application класса

Здесь вы создаете Application класс с компонентами:

src/main/java/hello/Application.java

package hello;

import java.util.Arrays;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

}

  • @Configuration помечает класс как источник определения бинов для контекста приложения
  • @EnableAutoConfiguration говорит Spring Boot о запуске добавления бинов в соответствии с
    содержанием classpath и других бинов, а также различных параметров настроек
  • Обычно вы добавили бы @EnableMVC для Spring MVC, но Spring Boot добавляет её автоматически,
    когда видит spring-webmvc в classpath. Этот флаг помечает приложение как web приложение
    и активирует ключевые действия, такие как настройка DispatcherServlet
  • @ComponentScan говорит Spring о том, чтобы просмотреть все компоненты, конфигурации и сервисы
    в пакете hello, сто позволяет ему найти HelloController

Метод main() используется Spring Boot методом SpringApplication.run() для запуска
приложения. Вы обратили внимание, что нет ни одной строчки на XML? Файла web.xml нет вообще.
Это приложение на 100% из чистой Java и вы ничего не делали для настройки какого-либо инструмента или
инфраструктуры.

Метод run() возвращает ApplicationContext и этому приложению отдаются все бины,
которые были созданы вашим приложением или автоматически добавлены благодаря Spring Boot. Метод сортирует
бины и печатает их имена.

Запуск приложения

Для запуска приложения выполните:

./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar

Если вы используете Maven, то:

mvn package && java -jar target/gs-spring-boot-0.1.0.jar

Вы должны увидеть примерно такое:

Let's inspect the beans provided by Spring Boot:
application
beanNameHandlerMapping
defaultServletHandlerMapping
dispatcherServlet
embeddedServletContainerCustomizerBeanPostProcessor
handlerExceptionResolver
helloController
httpRequestHandlerAdapter
messageSource
mvcContentNegotiationManager
mvcConversionService
mvcValidator
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$DispatcherServletConfiguration
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration
org.springframework.boot.context.embedded.properties.ServerProperties
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration
propertySourcesBinder
propertySourcesPlaceholderConfigurer
requestMappingHandlerAdapter
requestMappingHandlerMapping
resourceHandlerMapping
simpleControllerHandlerAdapter
tomcatEmbeddedServletContainerFactory
viewControllerHandlerMapping

Вы можете явно видеть org.springframework.boot.autoconfigure бины.
А также tomcatEmbeddedServletContainerFactory.

Проверьте сервис:

$ curl localhost:8080
Greetings from Spring Boot!

Добавление сервисов бизнес-уровня

Если вы создаете web-сайт для вашего бизнеса, то вам скорее всего необходимо добавить
некоторые сервисы для управления. Spring Boot предоставляет несколько таких «из коробки»
в одном из своих модулей,
таких как состояние, аудит, бины и другие.

Добавьте это в список зависимостей вашего файла сборки:

compile("org.springframework.boot:spring-boot-starter-actuator")

Если вы используете Maven, то добавьте это в список зависимостей:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Затем перезапустите приложение:

./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar

Если вы используете Maven, то:

mvn package && java -jar target/gs-spring-boot-0.1.0.jar

Вы увидите новый набор RESTful точек выхода, добавленных в приложение. Это сервисы управления,
предоставленные Spring Boot:

2014-06-03 13:23:28.119  ... : Mapped "{[/error],methods=[],params=[],headers=[],consumes...
2014-06-03 13:23:28.119  ... : Mapped "{[/error],methods=[],params=[],headers=[],consumes...
2014-06-03 13:23:28.136  ... : Mapped URL path [/**] onto handler of type [class org.spri...
2014-06-03 13:23:28.136  ... : Mapped URL path [/webjars/**] onto handler of type [class ...
2014-06-03 13:23:28.440  ... : Mapped "{[/info],methods=[GET],params=[],headers=[],consum...
2014-06-03 13:23:28.441  ... : Mapped "{[/autoconfig],methods=[GET],params=[],headers=[],...
2014-06-03 13:23:28.441  ... : Mapped "{[/mappings],methods=[GET],params=[],headers=[],co...
2014-06-03 13:23:28.442  ... : Mapped "{[/trace],methods=[GET],params=[],headers=[],consu...
2014-06-03 13:23:28.442  ... : Mapped "{[/env/{name:.*}],methods=[GET],params=[],headers=...
2014-06-03 13:23:28.442  ... : Mapped "{[/env],methods=[GET],params=[],headers=[],consume...
2014-06-03 13:23:28.443  ... : Mapped "{[/configprops],methods=[GET],params=[],headers=[]...
2014-06-03 13:23:28.443  ... : Mapped "{[/metrics/{name:.*}],methods=[GET],params=[],head...
2014-06-03 13:23:28.443  ... : Mapped "{[/metrics],methods=[GET],params=[],headers=[],con...
2014-06-03 13:23:28.444  ... : Mapped "{[/health],methods=[GET],params=[],headers=[],cons...
2014-06-03 13:23:28.444  ... : Mapped "{[/dump],methods=[GET],params=[],headers=[],consum...
2014-06-03 13:23:28.445  ... : Mapped "{[/beans],methods=[GET],params=[],headers=[],consu...

Они включают:
ошибки,
окружение,
состояние,
бины,
информацию,
метрики,
следы,
configprops и
дамп.

Также есть /shutdown, но она видна по умолчанию только через JMX. Для
включения её к общедоступным,
добавьте endpoints.shutdown.enabled=true в ваш application.properties файл.

это легко проверить по состоянию приложения:

$ curl localhost:8080/health
ok

Вы можете попытаться вызвать завершение работы через curl:

$ curl -X POST localhost:8080/shutdown
{"timestamp":1401820343710,"error":"Method Not Allowed","status":405,"message":"Request method 'POST' not supported"}

Т.к. мы не включили его, запрос блокирован, потому что его не существует.

Более подробную информацию о каждом из этих REST сервисов и о том, как вы можете настраивать под себя
в application.properties, вы можете прочитать в
документации.

Просмотр Spring Boot starters

Последний пример показал как Spring Boot упрощает инициализацию бинов, о которых вы не знаете,
что они вам нужны. И он показал, как подклюсить удобные для управления сервисы.

Но Spring Boot делает ещё большее. Он поддерживает не только традиционное использование WAR файлов,
но также сборку исполняемых JAR файлов, благодаря модулю загрузчика Spring Boot. Различные уроки
демонстрируют эту двойную поддержку через spring-boot-gradle-plugin и
spring-boot-maven-plugin.

ко всему прочему, Spring Boot поддерживает Groovy, позволяя вам создавать Spring MVC приложения
в небольшом и единственном файле.

Создайте новый файл app.groovy и поместите в него приведенный ниже код:

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        return "Hello World!"
    }

}

Не имеет значения, где расположен файл. Можете даже гордится приложением, как мало
нужно всего лишь для единственного твита!

Далее, установите Spring Boot’s CLI

.

Запустите его:

$ spring run app.groovy

Предполагается, что вы завершите предыдущее приложение во избежание конфликта портов.

Давайте проверим, что получилось:

$ curl localhost:8080
Hello World!

Spring Boot динамически добавляет аннотации к вашему коду и использует
Groovy Grape для
подтягивания необходимых для запуска приложения библиотек. Смотрите
документацию,
если хотите копнуть шлубже.

Итог

Поздравляем! Вы только что создали простое web приложени с использованием Spring Boot и изучили
как нарастить ваш темп разработки. вы также настроили некоторые удобные сервисы. Это только малая
часть того, что может делать Spring Boot.

С оригинальным текстом урока вы можете ознакомиться на
spring.io.

comments powered by

Время на прочтение
8 мин

Количество просмотров 328K

Из-за громоздкой конфигурации зависимостей настройка Spring для корпоративных приложений превратилась в весьма утомительное и подверженное ошибкам занятие. Особенно это относится к приложениям, которые используют также несколько сторонних библиотек

Каждый раз, создавая очередное корпоративное Java-приложение на основе Spring, вам необходимо повторять одни и те же рутинные шаги по его настройке:

  • В зависимости от типа создаваемого приложения (Spring MVC, Spring JDBC, Spring ORM и т.д.) импортировать необходимые Spring-модули
  • Импортировать библиотеку web-контейнеров (в случае web-приложений)
  • Импортировать необходимые сторонние библиотеки (например, Hibernate, Jackson), при этом вы должны искать версии, совместимые с указанной версией Spring
  • Конфигурировать компоненты DAO, такие, как: источники данных, управление транзакциями и т.д.
  • Конфигурировать компоненты web-слоя, такие, как: диспетчер ресурсов, view resolver
  • Определить класс, который загрузит все необходимые конфигурации

1. Представляем Spring Boot

Авторы Spring решили предоставить разработчикам некоторые утилиты, которые автоматизируют процедуру настройки и ускоряют процесс создания и развертывания Spring-приложений, под общим названием Spring Boot

Spring Boot — это полезный проект, целью которого является упрощение создания приложений на основе Spring. Он позволяет наиболее простым способом создать web-приложение, требуя от разработчиков минимум усилий по его настройке и написанию кода

2. Особенности Spring Boot

Spring Boot обладает большим функционалом, но его наиболее значимыми особенностями являются: управление зависимостями, автоматическая конфигурация и встроенные контейнеры сервлетов

2.1. Простота управления зависимостями

Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т.д.)

Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)

Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate)

Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat

Другими словами, Spring Boot собирает все общие зависимости и определяет их в одном месте, что позволяет разработчикам просто использовать их, вместо того, чтобы изобретать колесо каждый раз, когда они создают новое приложение

Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях

Обратитесь к документации, чтобы ознакомиться со всеми Spring Boot starter-пакетами

2.2. Автоматическая конфигурация

Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения

После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей

Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource

Если вы используете spring-boot-starter-jdbc, Spring Boot автоматически регистрирует бины DataSource, EntityManagerFactory, TransactionManager и считывает информацию для подключения к базе данных из файла application.properties

Если вы не собираетесь использовать базу данных, и не предоставляете никаких подробных сведений о подключении в ручном режиме, Spring Boot автоматически настроит базу в памяти, без какой-либо дополнительной конфигурации с вашей стороны (при наличии H2 или HSQL библиотек)

Автоматическая конфигурация может быть полностью переопределена в любой момент с помощью пользовательских настроек

2.3. Встроенная поддержка сервера приложений — контейнера сервлетов

Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются «из коробки»

Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера

Если вам нужно использовать отдельный HTTP-сервер, для этого достаточно исключить зависимости по умолчанию. Spring Boot предоставляет отдельные starter-пакеты для разных HTTP-серверов

Создание автономных web-приложений со встроенными серверами не только удобно для разработки, но и является допустимым решением для приложений корпоративного уровня и становится все более полезно в мире микросервисов. Возможность быстро упаковать весь сервис (например, аутентификацию пользователя) в автономном и полностью развертываемом артефакте, который также предоставляет API — делает установку и развертывание приложения значительно проще

3. Требования к установке Spring Boot

Для настройки и запуска Spring Boot приложений требуется следующее:

  • Java 8+
  • Apache Maven 3.x

4. Создание Spring Boot приложения

Теперь давайте перейдем к практике и реализуем очень простой REST API для приема платежей, используя возможности Spring Boot

4.1. Создание web-проекта с использованием Maven

Создайте Maven-проект в используемой вами IDE, назвав его SpringBootRestService

Обязательно используйте версию Java 8+, поскольку Spring Boot не работает с более ранними версиями

4.2. Конфигурация pom.xml

Вторым шагом необходимо настроить Spring Boot в файле pom.xml

Все приложения Spring Boot конфигурируются от spring-boot-starter-parent, поэтому перед дальнейшим определением зависимостей, добавьте starter-parent следующим образом:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
</parent>

Т.к. мы создаем REST API, то необходимо в качестве зависимости использовать spring-boot-starter-web, которая неявно определяет все остальные зависимости, такие как spring-core, spring-web, spring-webmvc, servlet api, и библиотеку jackson-databind, поэтому просто добавьте в pom.xml следующее:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Теперь следующие jar-библиотеки автоматически импортируются в ваш проект:

image

Следующий шаг — добавляем Spring Boot плагин:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Последний шаг — сделать так, чтобы Maven генерировал исполняемый jar-файл при сборке:

<packaging>jar</packaging>

Ниже приведен полный файл pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springboot.topjava.ru</groupId>
    <artifactId>SpringBootRestService</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <properties>
        <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>2.1.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Как видите, используя одну зависимость, мы можем создать полностью функциональное web-приложение

4.3. Создание ресурсов REST

Теперь мы собираемся создать контроллер платежей вместе с POJO-классами для запросов и ответов

Напишем класс запроса платежа:

package springboot.topjava.ru;

public class PaymentRequest {

    private int userId;
    private String itemId;
    private double discount;

    public String getItemId() {
        return itemId;
    }

    public void setItemId(String itemId) {
        this.itemId = itemId;
    }

    public double getDiscount() {
        return discount;
    }

    public void setDiscount(double discount) {
        this.discount = discount;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }
}

А также класс, обрабатывающий базовый ответ, возвращаемый нашим сервисом:

package springboot.topjava.ru;

public class BaseResponse {

    private final String status;
    private final Integer code;

    public BaseResponse(String status, Integer code) {
        this.status = status;
        this.code = code;
    }

    public String getStatus() {
        return status;
    }

    public Integer getCode() {
        return code;
    }
}

А теперь создадим контроллер:

package springboot.topjava.ru;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/payment")
public class PaymentController {

    private final String sharedKey = "SHARED_KEY";

    private static final String SUCCESS_STATUS = "success";
    private static final String ERROR_STATUS = "error";
    private static final int CODE_SUCCESS = 100;
    private static final int AUTH_FAILURE = 102;

    @GetMapping
    public BaseResponse showStatus() {
        return new BaseResponse(SUCCESS_STATUS, 1);
    }

    @PostMapping("/pay")
    public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) {

        final BaseResponse response;

        if (sharedKey.equalsIgnoreCase(key)) {
            int userId = request.getUserId();
            String itemId = request.getItemId();
            double discount = request.getDiscount();
            // Process the request
            // ....
            // Return success response to the client.
            response = new BaseResponse(SUCCESS_STATUS, CODE_SUCCESS);
        } else {
            response = new BaseResponse(ERROR_STATUS, AUTH_FAILURE);
        }
        return response;
    }
}

4.4. Создание основного класса приложения

Этот последний шаг заключается в создании класса конфигурации и запуска приложения. Spring Boot поддерживает новую аннотацию @SpringBootApplication, которая эквивалентна использованию @Configuration, @EnableAutoConfiguration и @ComponentScan с их атрибутами по умолчанию

Таким образом, вам просто нужно создать класс, аннотированный с помощью @SpringBootApplication, а Spring Boot включит автоматическую настройку и отсканирует ваши ресурсы в текущем пакете:

package springboot.topjava.ru;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

5. Развертывание приложения Spring Boot

Теперь давайте воспользуемся третьей замечательной особенностью Spring Boot — это встроенный сервер. Все, что нам нужно сделать — это создать исполняемый jar-файл с помощью Maven и запустить его, как обычное автономное приложение:

  • Войдите в режим командной строки (команда cmd), перейдите в папку с pom.xml и введите команду mvn clean package
  • Maven cгенерирует исполняемый jar-файл с именем SpringBootRestService-1.0.jar
  • Перейдите в папку cd target
  • Затем запустите jar-файл: java -jar SpringBootRestService-1.0.jar
  • Перейдите в браузере по адресу http://localhost:8080/payment

Наш REST API запущен и готов обслуживать запросы через порт 8080 (по умолчанию)

В этой статье мы рассмотрели возможности Spring Boot и создали полностью рабочий пример с использованием встроенного сервера

Источник:
https://dzone.com/articles/introducing-spring-boot

В переводе обновили информацию:

  • Spring-boot-starter-parent изменили версию с 1.5.8.RELEASE на 2.1.1.RELEASE и соответственно был обновлен список библиотек, которые подтягивает Maven
  • Убрали объявления репозиториев Spring, зависимости подтягиваются из центрального репозитория
  • В классе BaseResponse поля сделали final, добавили конструктор и убрали сеттеры
  • В контроллере PaymentController ввели метод showStatus() с @GetMapping для тестирования приложения в браузере
  • Заменили @RequestMapping в методах на @GetMapping/@PostMapping
  • Также были внесены правки по развертыванию приложения с командной строки

UPDATE:

Как заметил Lure_of_Chaos, теперь уже все можно сделать автоматически через SPRING INITIALIZR. Причем не выходя из любимой JetBrains IntelliJ IDEA.

Вступление

Spring Boot — это популярный фреймворк для создания веб-приложений с использованием Java. Это часть фреймворка Spring, которая представляет собой набор инструментов и библиотек для создания приложений корпоративного уровня. Spring Boot упрощает создание автономных приложений производственного уровня, которые можно легко развернуть и запустить с минимальной конфигурацией.

Как разработчик с 3-летним опытом работы с Spring Boot, я могу с уверенностью сказать, что это один из самых мощных и универсальных фреймворков для создания веб-приложений с использованием языка программирования Java.

Во время моей стажировки у меня была возможность поработать со встроенными функциями Spring Boot, такими как Spring Security и Spring Data. Эти функции упростили реализацию безопасности и управления данными в приложении.

Как Spring Boot облегчает жизнь разработчикам?

По моему опыту, одним из самых больших преимуществ Spring Boot является его способность автоматически настраивать ваше приложение на основе зависимостей, которые вы добавили в свой проект. Эта функция экономит много времени и усилий разработчикам, так как устраняет необходимость в ручной настройке. В результате разработчики могут сосредоточиться на написании кода и реализации функций, а не тратить часы на настройку приложения.

Ещё одним преимуществом Spring Boot является его поддержка широкого спектра технологий веб-приложений. В своих проектах я использовал Spring Boot с Spring MVC, Spring WebFlux и Thymeleaf. Я также работал с различными технологиями доступа к данным, такими как JPA, JDBC, ArangoDB и MongoDB. Такая гибкость позволяет разработчикам выбирать технологию, которая наилучшим образом соответствует их потребностям, и устраняет проблемы совместимости.

Большое и активное сообщество разработчиков Spring Boot также является значительным преимуществом. Во время своих проектов я часто консультировался с учебными пособиями, документацией и примерами кода из сообщества. И всякий раз, когда я сталкивался с какими-либо проблемами, я всегда мог найти решение, выполнив поиск в Интернете или обратившись за помощью на форумах, посвященных Spring Boot.

Как создать проект на Spring Boot?

Существует несколько способов создания проекта на Spring Boot, но наиболее распространённым методом является использование веб-сайта Spring Initializer (https://start.spring.io /) или инструмент Spring CLI (интерфейс командной строки).

Способ 1: Использование веб-сайта Spring Initializer:

  • Перейдите на веб-сайт Spring Initializer (https://start.spring.io /).
  • Выберите параметры, которые для своего проекта, такие как тип проекта, язык и версия Spring Boot.
  • Выберите зависимости, которые вы хотите включить в свой проект.
  • Нажмите на кнопку Generate, чтобы загрузить ZIP-файл, содержащий файлы проекта.
  • Извлеките содержимое ZIP-файла в каталог на вашем компьютере.
  • Импортируйте проект в предпочитаемую вами IDE (интегрированную среду разработки) и приступайте к разработке своего приложения.

Способ 2: Использование Spring CLI:

  • Установите инструмент Spring CLI на свой компьютер. Это можно сделать, следуя инструкциям на веб-сайте Spring (https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-started-installing-the-cli).
  • Откройте командную строку или окно терминала.
  • Запустите команду spring init —dependencies=web myproject, чтобы создать новый проект Spring Boot с веб-зависимостью.
  • Приведённая выше команда создаст новый каталог под названием “myproject” с файлами проекта.
  • Перейдите в новый каталог, выполнив команду cd myproject
  • Запустите команду ./mvnw spring-boot:run, чтобы запустить приложение.

Оба метода создадут базовый проект на Spring Boot, который вы можете использовать в качестве отправной точки для своего приложения. Как только проект будет создан, вы сможете приступить к разработке своего приложения, добавляя новые контроллеры, службы и представления по мере необходимости.

Простой проект на Spring Boot

Ниже приведён пример приложения Spring Boot, которое демонстрирует, как создать простую конечную точку “Hello, World!” с использованием Spring MVC.

  • 1. Создайте новый проект Spring Boot с помощью веб-сайта Spring Initializer или инструмента Spring CLI.
  • 2. Добавьте следующую зависимость к вашему проекту pom.xml файл (если вы используете Maven) или файл build.gradle (если вы используете Gradle):

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

  • 3. Создайте новый пакет с именем “com.example.app” и внутри этого пакета создайте новый класс с именем “HelloController”. Добавьте следующий код:

package com.example.app;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@GetMapping(«/hello»)
public String sayHello() {
return «Hello, World!»;
}
}

  • 4. Создайте новый класс под названием “Application” и добавьте следующий код:

package com.example.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

  • 5. Запустите приложение, запустив класс Application как Java-приложение.
  • 6. Откройте свой браузер и перейдите к “http://localhost:8080/hello». Вы должны увидеть сообщение “Hello, World!”, отображаемое в браузере.

Это очень простой пример того, как создать обычную конечную точку с помощью Spring Boot. Вы можете добавить больше функциональности и сложности в приложение по мере необходимости.

Создание конечной точки RESTful API

Создание конечной точки RESTful API с помощью Spring Boot — относительно простой процесс. Первый шаг — создать новый класс контроллера и снабдить его аннотацией @RestController. Эта аннотация сообщает Spring Boot, что класс следует рассматривать как контроллер и что он должен обрабатывать входящие HTTP-запросы.

Далее вам нужно будет создать новый метод в классе контроллера и снабдить его аннотацией @RequestMapping. Эта аннотация сопоставляет метод с определённым URI, а также может указывать HTTP-метод, который должен обрабатывать этот метод. Например, вы можете использовать аннотацию @GetMapping для сопоставления метода с определённым URI и обработки только запросов GET.

Вот пример простой конечной точки RESTful API, которая сопоставляется с URI “/hello” и возвращает сообщение “Hello, World!” при обращении к конечной точке:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@GetMapping(«/hello»)
public String sayHello() {
return «Hello, World!»;
}
}

В этом примере аннотация @RestController говорит Spring Boot обрабатывать класс как контроллер, а аннотация @GetMapping(«/hello») сопоставляет метод sayHello() с URI «/hello» и обрабатывает только запросы GET. Метод возвращает строку «Hello, World!» при обращении к конечной точке.

Вы также можете передать параметры конечной точке, используя аннотацию @PathVariable, например:

@GetMapping(«/hello/{name}»)
public String sayHello(@PathVariable String name) {
return «Hello, » + name + «!»;
}

В этом примере конечная точка /hello/{name} принимает параметр name в пути и возвращает «Hello, [имя]».

Вы также можете использовать аннотацию @RequestParam для передачи параметров запроса в конечную точку, например:

@GetMapping(«/hello»)
public String sayHello(@RequestParam(value = «name», defaultValue = «World») String name) {
return «Hello, » + name + «!»;
}

В этом примере конечная точка /hello принимает параметр name в запросе и возвращает «Hello, [имя]».

Это всего лишь базовый пример того, как создать конечную точку RESTful API с помощью Spring Boot. Вы можете добавить больше функциональности и сложности в приложение по мере необходимости.

Использование встроенных функций Spring Boot

Spring Boot предоставляет множество встроенных функций, которые могут быть легко интегрированы в ваше приложение для добавления функциональности и упрощения разработки. Вот некоторые из наиболее часто используемых встроенных функций:

  • 1. Spring Security: Spring Boot предоставляет встроенную поддержку для добавления аутентификации и авторизации в ваше приложение. Это можно сделать, добавив зависимость spring-boot-starter-security в свой проект и настроив параметры безопасности в application.properties или application.yml файлах.
  • 2. Spring Data: Spring Boot предоставляет встроенную поддержку для работы с базами данных и другими источниками данных. Это можно сделать, добавив зависимость spring-boot-starter-data-jpa или spring-boot-starter-data-mongodb к вашему проекту и настроив источник данных в application.properties или application.yml файлах.
  • 3. Spring WebFlux: Spring Boot предоставляет встроенную поддержку для создания реактивных веб-приложений. Это можно сделать, добавив зависимость spring-boot-starter-webflux к вашему проекту и используя модель реактивного программирования, предоставляемую Spring WebFlux.
  • 4. Spring Actuator: Spring Boot обеспечивает встроенную поддержку для мониторинга и управления вашим приложением. Это можно сделать, добавив зависимость spring-boot-starter-actuator к вашему проекту и настроив параметры привода в application.properties или application.yml файлах.

Вот пример того, как использовать Spring Security в приложении Spring Boot:

  • 1. Spring Security: Spring Boot предоставляет встроенную поддержку для добавления аутентификации и авторизации в ваше приложение. Это можно сделать, добавив зависимость spring-boot-starter-security в свой проект и настроив параметры безопасности в application.properties или application.yml файлах.
  • 2. Spring Data: Spring Boot предоставляет встроенную поддержку для работы с базами данных и другими источниками данных. Это можно сделать, добавив зависимость spring-boot-starter-data-jpa или spring-boot-starter-data-mongodb к вашему проекту и настроив источник данных в application.properties или application.yml файлах.
  • 3. Spring WebFlux: Spring Boot предоставляет встроенную поддержку для создания реактивных веб-приложений. Это можно сделать, добавив зависимость spring-boot-starter-webflux к вашему проекту и используя модель реактивного программирования, предоставляемую Spring WebFlux.
  • 4. Spring Actuator: Spring Boot обеспечивает встроенную поддержку для мониторинга и управления вашим приложением. Это можно сделать, добавив зависимость spring-boot-starter-actuator к вашему проекту и настроив параметры привода в application.properties или application.yml файлах.

Вот пример того, как использовать Spring Security в приложении Spring Boot:

  • 1. добавьте зависимость spring-boot-starter-security в свой проект.
  • 2. Создайте новый класс с именем “SecurityConfig” и добавьте следующий код:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser(«user»).password(«password»).roles(«USER»);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers(«/hello»).permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}

В этом примере класс SecurityConfig используется для настройки параметров безопасности для приложения. Метод configure() используется для настройки диспетчера аутентификации, а также для настройки параметров безопасности HTTP.

Строка antMatchers(«/hello»).PermitAll() позволяет получать доступ ко всем запросам к конечной точке «/hello» без аутентификации, в то время как anyRequest().authenticated() требует аутентификации для всех остальных запросов. А метод formLogin() обеспечивает аутентификацию приложения на основе форм.

Аналогичным образом, вы можете использовать Spring Data и Spring Web Flux, добавив соответствующие зависимости и настроив параметры в application.properties или application.yml файлах. А для Spring Actuator добавьте зависимость spring-boot-starter-actuator и настройте параметры привода в application.properties или application.yml файлах.

Подключение вашего приложения на Spring Boot к базе данных

Spring Boot предоставляет встроенную поддержку для подключения к различным базам данных, включая реляционные базы данных (такие как MySQL, PostgreSQL и Oracle) и базы данных NoSQL (такие как MongoDB и Cassandra).

Одним из наиболее распространённых способов подключения к базе данных в Spring Boot является использование модуля Spring Data JPA (Java Persistence API). Этот модуль обеспечивает последовательный и простой способ взаимодействия с базами данных с использованием стандарта JPA.

Чтобы использовать Spring Data JPA в вашем приложении, вам нужно будет добавить зависимость spring-boot-starter-data-jpa к вашему проекту и настроить источник данных в application.properties или application.yml файлах.

Вот пример того, как настроить подключение к базе данных MySQL в Spring Boot:

  • 1. Добавьте зависимости spring-boot-starter-data-jpa и mysql-connector-java в свой проект.
  • 2. В application.properties или application.yml файлах, настройте источник данных, добавив следующие свойства:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

Развёртывание приложения на Spring Boot

Развёртывание приложения на Spring Boot может быть выполнено различными способами, в зависимости от ваших конкретных требований и среды, в которой вы это осуществляете. Некоторые из наиболее распространенных способов развёртывания приложения на Spring Boot включают:

  • Запуск приложения как отдельного файла jar или war: Это самый простой способ развёртывания приложения Spring Boot. Это может быть сделано с помощью плагинов Spring Boot Maven или Gradle для упаковки приложения в виде отдельного файла jar или war. Как только приложение упаковано, его можно запустить с помощью команды java -jar.
  • Развёртывание на веб-сервере: приложения Spring Boot также могут быть развёрнуты на веб-сервере, таком как Apache Tomcat или Jetty. Это можно сделать, упаковав приложение в виде файла war и развернув его на веб-сервере.
  • Развёртывание у облачного провайдера: приложения Spring Boot можно легко развернуть у облачных провайдеров, таких как AWS, Azure и Google Cloud. Это можно сделать с помощью специфичных для облака инструментов и служб, таких как Elastic Beanstalk, App Engine и Cloud Foundry.
  • Использование платформы контейнеризации: Приложения Spring Boot могут быть развернуты с использованием платформ контейнеризации, таких как Docker, Kubernetes и OpenShift. Это можно сделать, создав Docker-образ приложения и развернув его на платформе контейнеризации.
  • Развёртывание на сервере приложений: Приложения Spring Boot могут быть развёрнуты на сервере приложений, таком как WildFly, JBoss EAP и WebLogic. Это можно сделать, упаковав приложение в виде файла war и развернув его на сервере приложений.

Важно отметить, что процесс развёртывания может варьироваться в зависимости от конкретной среды и требований вашего приложения. Рекомендуется протестировать приложение в разных средах, прежде чем развёртывать его в производственной среде.

Лучшие практики и устранение неполадок

При работе с Spring Boot существует несколько рекомендаций и методов устранения неполадок, которые могут помочь вам создавать более совершенные приложения и быстрее устранять проблемы.

  • Поддерживайте версию Spring Boot в актуальном состоянии: Spring Boot постоянно развивается, и регулярно выпускаются новые версии. Обновление версии Spring Boot вашего приложения может помочь обеспечить вам доступ к новейшим функциям и исправлениям ошибок.
  • Используйте встроенное логирование Spring Boot: Spring Boot предоставляет встроенную поддержку логирования. Рекомендуется использовать эту функцию, а не стороннюю библиотеку. Это обеспечит лучшую интеграцию с экосистемой Spring Boot и упростит устранение неполадок.
  • Используйте Spring Boot Actuator: Spring Boot Actuator предоставляет множество конечных точек, которые можно использовать для мониторинга вашего приложения и управления им. Это может помочь вам быстро выявлять и устранять проблемы.
  • Поддерживайте актуальность зависимостей вашего приложения: Регулярное обновление зависимостей вашего приложения может помочь обеспечить вам доступ к новейшим функциям и исправлениям ошибок.
  • Используйте Profiler: Spring Boot предоставляет встроенную поддержку профилирования вашего приложения, которая может помочь вам выявить узкие места в производительности и утечки памяти.
  • Используйте поддержку тестирования Spring Boot: Spring Boot предоставляет встроенную поддержку тестирования, которая может помочь вам быстро и легко писать и запускать тесты для вашего приложения.
  • Помните о конфигурации: Spring Boot позволяет вам настраивать ваше приложение с помощью различных методов, таких как properties файл, yml файл и аннотации. Помните о конфигурации, которую вы используете, и убедитесь, что она корректна.
  • Ознакомьтесь с документацией: Spring Boot располагает обширной документацией, которая может помочь вам понять, как использовать фреймворк и решать распространённые проблемы.

Для устранения неполадок Spring Boot также предоставляет множество вариантов отладки, которые могут помочь вам быстро выявлять и устранять проблемы. Например, вы можете использовать привод Spring Boot для просмотра метрик приложения или включить отладку, добавив флаг — debug при запуске приложения. Кроме того, вы можете использовать Spring Boot DevTools для быстрого внесения изменений в ваше приложение и просмотра результатов в режиме реального времени.

Другим полезным инструментом для устранения неполадок является Spring Boot CLI, который позволяет быстро запускать и тестировать приложения Spring Boot из командной строки. Это может быть полезно для быстрого выявления и решения проблем без необходимости настройки полной среды разработки.

Заключение

В статье обсуждался процесс создания конечной точки RESTful API, использование встроенных функций Spring Boot, подключение к базе данных, развёртывание приложения Spring Boot, а также рекомендации и методы устранения неполадок.

Spring Boot предоставляет встроенную поддержку для подключения к базам данных, повышения безопасности приложения, работы с модулем Spring WebFlux и мониторинга приложения с помощью Spring Actuator. Кроме того, он может быть легко развёрнут в различных средах, включая автономные веб-серверы, облачных провайдеров, платформы контейнеризации и серверы приложений. Следуя рекомендациям, таким как обновление версии Spring Boot, использование встроенного ведения журнала Spring Boot и использование привода Spring Boot, разработчики могут создавать более совершенные приложения и быстрее устранять проблемы.

В заключение, Spring Boot — это мощная и гибкая платформа для создания веб-приложений с использованием фреймворка Spring. Она упрощает процесс разработки, предоставляя множество встроенных функций и инструментов, которые могут быть легко интегрированы в ваше приложение.

Ссылка была взята с этого источника:

Юрий Авраменко

Юрий Авраменко


Senior Software Developer

На этом примере рассмотрим, как можно быстро научиться создавать веб-приложения, которые могут из микроприложений вырасти в серьезные проекты.

Содержание:

  • Первоначальная настройка приложения
  • Создание класса Task
  • Создание интерфейса TaskRepository
  • Создание класса TaskService
  • Создание контроллера TaskController
  • Создание шаблона для Freemarker
  • Запуск приложения

Первоначальная настройка приложения

Переходим на сайт Spring Initializr и подготавливаем минимальный шаблон для нашего будущего приложения:

Создание приложения на Spring Boot

Создание каркаса проекта

В левой части оставляем настройки по умолчанию, кроме версии Java (будет достаточно 8), и заполняем Project Metadata.

В правой части необходимо добавить зависимости, нужные для приложения.

  • Spring Web — модуль, включающий необходимые компоненты для веб-приложения и имеющий встроенный контейнер сервлетов Apache Tomcat.
  • Spring Data JPA — библиотека, используемая для взаимодействия с сущностями базы данных.
  • H2 Database — очень удобная база данных. Располагается в памяти, следовательно, хранит данные только пока запущено приложение. Не используется в продакшене, но для знакомства в этом проекте её будет достаточно.
  • Apache Freemarker — шаблонизатор, будем использовать его для генерации HTML-страниц.

Всё готово, нажимаем GENERATE и получаем архив с исходным кодом проекта. Это минимальный каркас, который импортируем в используемую IDE.

В этом проекте используется IntelliJ IDEA.

Следуем по пути File -> New -> Project from Existing Sources, в диалоговом окне выбираем папку, где находится pom.xml файл проекта. Импортируем проект.

Импорт проекта Java Sprong Boot

Настройка импорта

В следующих диалоговых окнах все настройки оставляем по умолчанию. Единственное, в одном из окон удостоверимся, что имеем ранее установленную JDK соответствующей версии, в данном случае 8.

импорт проекта Sprong Boot

Импорт проекта

Если JDK не была установлена ранее, её  можно скачать с официального сайта.

Все остальные окна кликаем Next и в последнем — Finish.

Кратко рассмотрим структуру проекта. В первую очередь интересны:

  • файл pom.xml — файл с описанием всех зависимостей, необходимых для приложения;
  • файл application.properties — файл с настройками проекта;
  • каталог java — основной каталог пакетов и классов;
  • каталог resources — каталог для хранения ресурсов (шаблоны, файлы настроек, локализации и т.д.).

Создадим дополнительные пакеты :

  • entity для сущностей, в текущем проекте это будет класс Task;
  • controller для классов контроллера;
  • repository для слоя Repository, интерфейс с описанием общих методов, которые будут использоваться при взаимодействии с базой данных;
  • service для классов с бизнес-логикой.

Основной сущностью данного приложения будет сущность Task, которая будет иметь идентификатор, описание задачи, дату выполнения, приоритет выполнения.

Создадим класс Task в пакете entity

package com.myorganization.Organizer.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

@Entity
public class Task {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Integer id;

   private Integer priorityId;

   private String description;

   private Date date;

   public Task() {
   }

   public Task(Integer id, Integer priorityId, String description, Date date) {
       this.id = id;
       this.priorityId = priorityId;
       this.description = description;
       this.date = date;
   }

   public Integer getId() {
       return id;
   }

   public void setId(Integer id) {
       this.id = id;
   }

   public Integer getPriorityId() {
       return priorityId;
   }

   public void setPriorityId(Integer priorityId) {
       this.priorityId = priorityId;
   }

   public String getDescription() {
       return description;
   }

   public void setDescription(String description) {
       this.description = description;
   }

   public Date getDate() {
       return date;
   }

   public void setDate(Date date) {
       this.date = date;
   }
}

Класс помечен аннотацией @Entity. Она указывает на то, что данный класс является сущностью и будет сохраняться в БД.

Данная сущность имеет первичный ключ поле id. Поле помечено аннотацией @Id и аннотацией @GeneratedValue, которая задает стратегию генерации первичного ключа как автоматическую генерацию, в этой сущности – целые числа в порядке возрастания.

Создадим интерфейс TaskRepository в пакете repository

package com.myorganization.Organizer.repository;

import com.myorganization.Organizer.entity.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface TaskRepository extends JpaRepository<Task, Integer> {

}

Класс унаследован от JpaRepository – интерфейса фреймворка Spring Data, предоставляющего набор стандартных методов JPA для работы с БД. Для данного приложения нет необходимости создавать дополнительные методы.

Создадим класс TaskService в пакете service

package com.myorganization.Organizer.service;

import com.myorganization.Organizer.entity.Task;
import com.myorganization.Organizer.repository.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TaskService {

    @Autowired
    private TaskRepository taskRepository;

    public List<Task> getAll() {
        return taskRepository.findAll(Sort.by(Sort.Order.asc("date"),
                                      Sort.Order.desc("priorityId")));
    }

    public Task save(Task task) {
        return taskRepository.save(task);
    }

    public void delete(int id) {
        taskRepository.deleteById(id);
    }
}

Класс содержит три метода для работы с задачами:

  • getAll() – метод, возвращающий все задачи, отсортированные в порядке возрастания даты и порядке убывания приоритета.
  • save(Task task) – метод создания новой задачи.
  • delete(int id) – метод, удаляющий задачу по переданному id.

Создадим контроллер TaskController в пакете controller

package com.myorganization.Organizer.controller;

import com.myorganization.Organizer.entity.Task;
import com.myorganization.Organizer.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class TaskController {

    @Autowired
    private TaskService taskService;

    @GetMapping("/")
    public String getAll(Model model) {
        List<Task> taskList = taskService.getAll();
        model.addAttribute("taskList", taskList);
        model.addAttribute("taskSize", taskList.size());
        return "index";
    }

    @RequestMapping("/delete/{id}")
    public String deleteTask(@PathVariable int id) {
        taskService.delete(id);
        return "redirect:/";
    }

    @PostMapping("/add")
    public String addTask(@ModelAttribute Task task) {
        taskService.save(task);
        return "redirect:/";
    }
}

Класс контроллер содержит три метода для управления задачами. При вызове методы обращаются в сервис TaskService, производят необходимые действия с сущностью и перенаправляют по заданному пути.

Замечание. Более правильно было бы добавить еще один интерфейс TaskService, который будет реализовывать существующий класс TaskService (изменим название на TaskServiceImpl), но в рамках этого приложения делать это не будем.

Создадим index.ftlh – шаблон для Freemarker в каталоге resources/templates

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Organizer</title>
      <link rel="stylesheet" type="text/css" href="/css/style.x45587.css"/>
</head>
<body>
<h1>Organizer</h1>
<h3>Add task to list</h3>
<form action="/add" method="post">
    <table border="1px">
        <tr>
            <td>
                <label>Priority</label>
                <input type="number" name="priorityId">
            </td>
            <td>
                <label>Description</label>
                <input type="text" name="description">
            </td>
            <td>
                <label>Date</label>
                <input type="date" name="date">
            </td>

            <td>
                <input type="submit" value="add task">
            </td>

        </tr>

    </table>
</form>
<br>
<h2>Task list(task count : ${taskSize})</h2>
<table border="1px">
    <tr>
        <td>Id</td>
        <td>Priority</td>
        <td>Task description</td>
        <td>Date</td>
        <td>Delete from list</td>
    </tr>
    <#list taskList as task>
    <tr>
        <td>${task.id}</td>
        <td>${task.priorityId}</td>
        <td>${task.description}</td>
        <td>${task.date}</td>
        <td><a href="${'/delete/'+task.id}"">Delete</a></td>
    </tr>
    </#list>
</table>
</body>
</html>

Стандартный HTML-файл. Единственное отличие – это конструкции вида ${….} и обозначение списка <#list ….>, вместо которых Freemarker подставит нужные нам значения.

Добавим простой CSS-файл style.css в каталоге resources/static/css:

table {
    border-collapse: collapse;
}
 
table th, table td {
    padding: 2px;
}

Структура проекта:

структура проекта Spring Boot Java

Проект готов к запуску и работе

Переходим к классу OrganizerApplication.class. Он был сформирован автоматически на первом шаге конфигурации каркаса проекта. Его содержимое:

package com.myorganization.Organizer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrganizerApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrganizerApplication.class, args);
    }

}

Переходим в меню >Run-> Run ‘OrganizerApplication’ или запускаем через сочетание клавиш Shift+F10. Процесс запуска отобразится в консоли ниже.

Переходим в браузер, набираем в адресной строке адрес localhost:8080 и наблюдаем работающий прототип приложения Organizer.

простое приложение на spring boot

Органайзер на Spring Boot

Так с помощью Spring Boot с минимальным набором классов менее чем за час можно создать работающее веб-приложение или основу для будущих проектов. Это уже тема другой статьи.

Посмотрите также 10 шпаргалок для веб-разработчика. Там есть видеокурс по Spring Boot.

Spring Boot можно использовать с «классическими» инструментами разработки Java или установить как инструмент командной строки. В любом случае вам потребуется Java SDK версии 1.8 или выше. Прежде чем начать, вы должны проверить текущую установку Java с помощью следующей команды:

Если вы новичок в разработке Java или хотите поэкспериментировать с Spring Boot, вы можете сначала попробовать Spring Boot CLI (интерфейс командной строки). В противном случае читайте «классические» инструкции по установке.

3.1.Инструкции по установке для Java-разработчика

Вы можете использовать Spring Boot так же, как любую стандартную библиотеку Java. Для этого включите соответствующие файлы spring-boot-*.jar в свой путь к классам. Spring Boot не требует интеграции каких-либо специальных инструментов, поэтому вы можете использовать любую IDE или текстовый редактор. Кроме того, в приложении Spring Boot нет ничего особенного, поэтому вы можете запускать и отлаживать приложение Spring Boot, как любую другую программу Java.

Хотя вы можете копировать jar-файлы Spring Boot, обычно мы рекомендуем использовать инструмент сборки, поддерживающий управление зависимостями (например, Maven или Gradle).

3.1.1.Установка Maven

Spring Boot совместим с Apache Maven 3.3 или выше. Если у вас еще не установлен Maven, вы можете следовать инструкциям на maven.apache.org .

Во многих операционных системах Maven можно установить с помощью диспетчера пакетов. Если вы используете OSX Homebrew, попробуйте brew install maven . Пользователи Ubuntu могут запустить sudo apt-get install maven . Пользователи Windows с Chocolatey могут запустить choco install maven из командной строки с повышенными правами (администратора).

Зависимости Spring Boot используют groupId org.springframework.boot . Как правило, ваш POM-файл Maven наследуется от проекта spring-boot-starter-parent и объявляет зависимости от одного или нескольких Starters . Spring Boot также предоставляет дополнительный подключаемый модуль Maven для создания исполняемых файлов jar.

Дополнительные сведения о начале работы с Spring Boot и Maven можно найти в разделе «Начало работы» справочного руководства подключаемого модуля Maven.

3.1.2.Установка Gradle

Spring Boot совместим с Gradle 6.8, 6.9 и 7.x. Если у вас еще не установлен Gradle, вы можете следовать инструкциям на gradle.org .

Зависимости Spring Boot можно объявить с помощью group org.springframework.boot . Как правило, ваш проект объявляет зависимости от одного или нескольких «стартеров» . Spring Boot предоставляет полезный подключаемый модуль Gradle , который можно использовать для упрощения объявлений зависимостей и создания исполняемых файлов jar.

Gradle Wrapper

Gradle Wrapper предоставляет удобный способ «получить» Gradle, когда вам нужно создать проект. Это небольшой скрипт и библиотека, которые вы фиксируете вместе с кодом для запуска процесса сборки. Подробнее см. docs.gradle.org/current/userguide/gradle_wrapper.html .

Более подробную информацию о начале работы с Spring Boot и Gradle можно найти в разделе «Начало работы» справочного руководства по плагину Gradle.

3.2.Установка Spring Boot CLI

Spring Boot CLI (интерфейс командной строки) — это инструмент командной строки, который можно использовать для быстрого прототипирования с помощью Spring. Он позволяет запускать сценарии Groovy , а это означает, что у вас есть знакомый Java-подобный синтаксис без такого большого количества шаблонного кода.

Вам не обязательно использовать CLI для работы с Spring Boot,но это быстрый способ начать работу с приложением Spring без IDE.

3.2.1.Ручная установка

Вы можете загрузить дистрибутив Spring CLI из репозитория программного обеспечения Spring:

  • spring-boot-cli-2.7.0-bin.zip

  • spring-boot-cli-2.7.0-bin.tar.gz

После загрузки следуйте инструкциям INSTALL.txt из распакованного архива. Таким образом, есть скрипт spring ( spring.bat для Windows) в каталоге bin/ в файле .zip . В качестве альтернативы вы можете использовать java -jar с файлом .jar (скрипт поможет вам убедиться, что путь к классам установлен правильно).

3.2.2.Установка с помощью SDKMAN!

SDKMAN! (Software Development Kit Manager) можно использовать для управления несколькими версиями различных двоичных пакетов SDK, включая Groovy и Spring Boot CLI. Получите SDKMAN! из sdkman.io и установите Spring Boot с помощью следующих команд:

$ sdk install springboot
$ spring --version
Spring CLI v2.7.0

Если вы разрабатываете функции для CLI и хотите получить доступ к созданной вами версии,используйте следующие команды:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.7.0-bin/spring-2.7.0/
$ sdk default springboot dev
$ spring --version
Spring CLI v2.7.0

Предыдущие инструкции устанавливают локальный экземпляр spring называемый экземпляром dev . Это указывает на целевом месте сборки, так что каждый раз , когда вы восстановить Весна Ботинок, spring является уточненный.

Вы можете увидеть это,выполнив следующую команду:

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 2.7.0

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

3.2.3.Установка OSX Homebrew

Если вы работаете на Mac и используете Homebrew , вы можете установить Spring Boot CLI, используя следующие команды:

$ brew tap spring-io/tap
$ brew install spring-boot

Homebrew устанавливает spring в /usr/local/bin .

Если вы не видите формулу, возможно, ваша установка для приготовления пива устарела. В этом случае запустите brew update и попробуйте еще раз.

3.2.4.Установка MacPorts

Если вы работаете на Mac и используете MacPorts , вы можете установить Spring Boot CLI с помощью следующей команды:

$ sudo port install spring-boot-cli

3.2.5.Завершение работы в командной строке

Интерфейс командной строки Spring Boot включает сценарии, обеспечивающие завершение команд для оболочек BASH и zsh . Вы можете source сценария (также названные spring ) в любой оболочке или положить его в вашей личной или общесистемной инициализации завершения Баша. В системе Debian общесистемные сценарии находятся в /shell-completion/bash , и все сценарии в этом каталоге выполняются при запуске новой оболочки. Например, чтобы запустить сценарий вручную, если вы установили его с помощью SDKMAN !, используйте следующие команды:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version

Если вы установили Spring Boot CLI с помощью Homebrew или MacPorts,скрипты завершения командной строки автоматически регистрируются в вашей оболочке.

3.2.6.Установка Windows Scoop

Если вы работаете в Windows и используете Scoop , вы можете установить Spring Boot CLI, используя следующие команды:

> scoop bucket add extras
> scoop install springboot

Scoop устанавливает spring в ~/scoop/apps/springboot/current/bin .

Если вы не видите манифест приложения, возможно, ваша установка scoop устарела. В этом случае запустите scoop update и попробуйте еще раз.

3.2.7.Пример быстрого запуска Spring CLI

Вы можете использовать следующее веб-приложение для проверки своей установки. Для начала создайте файл с именем app.groovy следующим образом:

@RestController
class ThisWillActuallyRun {

    @RequestMapping("/")
    String home() {
        "Hello World!"
    }

}

Затем запустите его из оболочки следующим образом:

Первый запуск вашего приложения происходит медленно,поскольку загружаются зависимости.Последующие запуски происходят гораздо быстрее.

Откройте localhost:8080 в своем любимом веб-браузере. Вы должны увидеть следующий результат:

Из-за громоздкой конфигурации зависимостей настройка Spring для корпоративных приложений превратилась в весьма утомительное и подверженное ошибкам занятие. Особенно это относится к приложениям, которые используют также несколько сторонних библиотек.

Каждый раз, создавая очередное корпоративное Java-приложение на основе Spring, вам необходимо повторять одни и те же рутинные шаги по его настройке:

  • В зависимости от типа создаваемого приложения (Spring MVC, Spring JDBC, Spring ORM и т. д.) импортировать необходимые Spring-модули
  • Импортировать библиотеку web-контейнеров (в случае web-приложений)
  • Импортировать необходимые сторонние библиотеки (например, Hibernate, Jackson), при этом вы должны искать версии, совместимые с указанной версией Spring
  • Конфигурировать компоненты DAO, такие, как: источники данных, управление транзакциями и т. д.
  • Конфигурировать компоненты web-слоя, такие, как: диспетчер ресурсов, view resolver
  • Определить класс, который загрузит все необходимые конфигурации

1. Представляем Spring Boot

Авторы Spring решили предоставить разработчикам некоторые утилиты, которые автоматизируют процедуру настройки и ускоряют процесс создания и развертывания Spring-приложений, под общим названием Spring Boot.

Spring Boot — это полезный проект, целью которого является упрощение создания приложений на основе Spring. Он позволяет наиболее простым способом создать web-приложение, требуя от разработчиков минимум усилий по его настройке и написанию кода.

2. Особенности Spring Boot

Spring Boot обладает большим функционалом, но его наиболее значимыми особенностями являются: управление зависимостями, автоматическая конфигурация и встроенные контейнеры сервлетов.

2.1. Простота управления зависимостями

Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т. д.).

Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже).

Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate).

Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat.

Другими словами, Spring Boot собирает все общие зависимости и определяет их в одном месте, что позволяет разработчикам просто использовать их, вместо того, чтобы изобретать колесо каждый раз, когда они создают новое приложение.

Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях.

Обратитесь к документации, чтобы ознакомиться со всеми Spring Boot starter-пакетами.

2.2. Автоматическая конфигурация

Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения.

После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей.

Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource.

Если вы используете spring-boot-starter-jdbc, Spring Boot автоматически регистрирует бины DataSource, EntityManagerFactory, TransactionManager и считывает информацию для подключения к базе данных из файла application.properties.

Если вы не собираетесь использовать базу данных, и не предоставляете никаких подробных сведений о подключении в ручном режиме, Spring Boot автоматически настроит базу в памяти, без какой-либо дополнительной конфигурации с вашей стороны (при наличии H2 или HSQL библиотек).

Автоматическая конфигурация может быть полностью переопределена в любой момент с помощью пользовательских настроек.

2.3. Встроенная поддержка сервера приложений — контейнера сервлетов

Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются «из коробки».

Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера.

Если вам нужно использовать отдельный HTTP-сервер, для этого достаточно исключить зависимости по умолчанию. Spring Boot предоставляет отдельные starter-пакеты для разных HTTP-серверов.

Создание автономных web-приложений со встроенными серверами не только удобно для разработки, но и является допустимым решением для приложений корпоративного уровня и становится все более полезно в мире микросервисов. Возможность быстро упаковать весь сервис (например, аутентификацию пользователя) в автономном и полностью развертываемом артефакте, который также предоставляет API — делает установку и развертывание приложения значительно проще.

3. Требования к установке Spring Boot

Для настройки и запуска Spring Boot приложений требуется следующее:

  • Java 8+
  • Apache Maven 3. x

    4. Создание Spring Boot приложения

    Теперь давайте перейдем к практике и реализуем очень простой REST API для приема платежей, используя возможности Spring Boot.

    4.1. Создание web-проекта с использованием Maven

    Создайте Maven-проект в используемой вами IDE, назвав его SpringBootRestService.

    Обязательно используйте версию Java 8+, поскольку Spring Boot не работает с более ранними версиями.

    4.2. Конфигурация pom. xml

    Вторым шагом необходимо настроить Spring Boot в файле pom.xml.

    Все приложения Spring Boot конфигурируются от spring-boot-starter-parent, поэтому перед дальнейшим определением зависимостей, добавьте starter-parent следующим образом:

    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>
    
    

    Т.к. мы создаем REST API, то необходимо в качестве зависимости использовать spring-boot-starter-web, которая неявно определяет все остальные зависимости, такие как spring-core, spring-web, spring-webmvc, servlet api, и библиотеку jackson-databind, поэтому просто добавьте в pom. xml следующее:

    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    Теперь следующие jar-библиотеки автоматически импортируются в ваш проект:

    Следующий шаг — добавляем Spring Boot плагин:

    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    

    Последний шаг — сделать так, чтобы Maven генерировал исполняемый jar-файл при сборке:

    
    <packaging>jar</packaging>
    

    Ниже приведен полный файл pom.xml:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>springboot.topjava.ru</groupId>
        <artifactId>SpringBootRestService</artifactId>
        <version>1.0</version>
        <packaging>jar</packaging>
    
        <properties>
            <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>2.1.1.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    Как видите, используя одну зависимость, мы можем создать полностью функциональное web-приложение.

    4.3. Создание ресурсов REST

    Теперь мы собираемся создать контроллер платежей вместе с POJO-классами для запросов и ответов.

    Напишем класс запроса платежа:

    
    package springboot.topjava.ru;
    
    public class PaymentRequest {
    
        private int userId;
        private String itemId;
        private double discount;
    
        public String getItemId() {
            return itemId;
        }
    
        public void setItemId(String itemId) {
            this.itemId = itemId;
        }
    
        public double getDiscount() {
            return discount;
        }
    
        public void setDiscount(double discount) {
            this.discount = discount;
        }
    
        public int getUserId() {
            return userId;
        }
    
        public void setUserId(int userId) {
            this.userId = userId;
        }
    }
    

    А также класс, обрабатывающий базовый ответ, возвращаемый нашим сервисом:

    
    package springboot.topjava.ru;
    
    public class BaseResponse {
    
        private final String status;
        private final Integer code;
    
        public BaseResponse(String status, Integer code) {
            this.status = status;
            this.code = code;
        }
    
        public String getStatus() {
            return status;
        }
    
        public Integer getCode() {
            return code;
        }
    }
    

    А теперь создадим контроллер:

    
    package springboot.topjava.ru;
    
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/payment")
    public class PaymentController {
        
        private final String sharedKey = "SHARED_KEY";
        
        private static final String SUCCESS_STATUS = "success";
        private static final String ERROR_STATUS = "error";
        private static final int CODE_SUCCESS = 100;
        private static final int AUTH_FAILURE = 102;
    
        @GetMapping
        public BaseResponse showStatus() {
            return new BaseResponse(SUCCESS_STATUS, 1);
        }
    
        @PostMapping("/pay")
        public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) {
            
            final BaseResponse response;
            
            if (sharedKey.equalsIgnoreCase(key)) {
                int userId = request.getUserId();
                String itemId = request.getItemId();
                double discount = request.getDiscount();
                // Process the request
                // ....
                // Return success response to the client.
                response = new BaseResponse(SUCCESS_STATUS, CODE_SUCCESS);
            } else {
                response = new BaseResponse(ERROR_STATUS, AUTH_FAILURE);
            }
            return response;
        }
    }
    

    4.4. Создание основного класса приложения

    Этот последний шаг заключается в создании класса конфигурации и запуска приложения. Spring Boot поддерживает новую аннотацию @SpringBootApplication, которая эквивалентна использованию @Configuration, @EnableAutoConfiguration и @ComponentScan с их атрибутами по умолчанию.

    Таким образом, вам просто нужно создать класс, аннотированный с помощью @SpringBootApplication, а Spring Boot включит автоматическую настройку и отсканирует ваши ресурсы в текущем пакете:

    
    package springboot.topjava.ru;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    5. Развертывание приложения Spring Boot

    Теперь давайте воспользуемся третьей замечательной особенностью Spring Boot — это встроенный сервер. Все, что нам нужно сделать — это создать исполняемый jar-файл с помощью Maven и запустить его, как обычное автономное приложение:

    • Войдите в режим командной строки (команда cmd), перейдите в папку с pom.xml и введите команду mvn clean package
    • Maven cгенерирует исполняемый jar-файл с именем SpringBootRestService-1.0.jar
    • Перейдите в папку cd target
    • Затем запустите jar-файл: java -jar SpringBootRestService-1.0.jar
    • Перейдите в браузере по адресу http://localhost:8080/payment

    Наш REST API запущен и готов обслуживать запросы через порт 8080 (по умолчанию).

    В этой статье мы рассмотрели возможности Spring Boot и создали полностью рабочий пример с использованием встроенного сервера.

    В переводе обновили информацию:

    • Spring-boot-starter-parent изменили версию с 1.5.8.RELEASE на 2.1.1.RELEASE и соответственно был обновлен список библиотек, которые подтягивает Maven
    • Убрали определение репозиториев Spring, сейчас в них нет необходимости, т.к. они загружаются из центрального репозитория
    • В классе BaseResponse поля сделали final, добавили конструктор и убрали сеттеры
    • В контроллере PaymentController ввели метод showStatus () с @GetMapping для тестирования в браузере работы приложения
    • Заменили @RequestMapping в методах на @GetMapping/@PostMapping
    • Также были внесены правки по развертыванию приложения с командной строки

    Оцените статью, если она вам понравилась!

    Вступление

    REST расшифровывается как REpresentational State Transfer ,
    стандартизованный подход к созданию веб-сервисов.

    REST API — это промежуточный интерфейс программирования
    приложений,
    который позволяет двум приложениям взаимодействовать друг с
    другом через HTTP, подобно тому, как серверы обмениваются данными с
    браузерами.

    RESTful — наиболее распространенный подход к созданию веб-сервисов из-за
    того, что его легко изучать и создавать.

    Допустим, вы заказываете что-то в ресторане быстрого питания, и кассир
    запрашивает у вас информацию, необходимую для обработки вашего заказа.
    После обработки они передают вам заказ, который вы запрашивали. Эта
    транзакция — реальный пример того, как работает REST API.

    В этом руководстве мы рассмотрим, как создать REST API на Java с
    помощью Spring Boot
    . Он будет принимать POST и GET для просмотра и
    добавления записей от объекта — User .

    Требования

    • IDE или текстовый редактор
    • JDK
      1.8 +
    • Maven 3+ или
      Gradle 4+ (в этой статье мы будем
      полагаться на Maven)

    Инициализация проекта загрузки Spring

    Использование Spring Initializr

    Один простой способ инициализировать новый проект Spring Boot —
    использовать Spring Initializr , который
    автоматически генерирует для вас скелет проекта Spring Boot:

    SpringInitializr{.ezlazyload}

    Мы также добавим сюда несколько зависимостей, так как мы захотим
    использовать их в нашем проекте:

    • Spring Web — для включения Spring MVC и встроенного Tomcat в ваш
      проект.
    • Spring Data JPA — Java Persistence API и Hibernate
    • Spring Boot DevTools — очень полезные инструменты разработки
    • Драйвер MySQL — драйвер JDBC (может быть любая БД, которую вы
      хотите использовать)

    После этого нажмите генерировать. Затем будет загружен zip-файл,
    содержащий созданный проект.

    Использование Spring CLI

    Если у вас установлен Spring
    CLI
    , вы можете выбрать использование консоли для создания базового проекта
    с помощью этой команды:

     spring init --build=maven -p=jar UserDemo 
    

    Примечание. Spring CLI напрямую вызывает Spring Initializr для
    выполнения этой операции. Оба варианта создают один и тот же проект.

    После создания базового проекта загрузите и импортируйте его в IDE или
    текстовый редактор по выбору. Если вы хотите собрать, скомпилировать и
    запустить свое приложение через IDE, убедитесь, что вы импортировали его
    как проект Maven или Gradle .

    После импорта сгенерированный базовый pom.xml в вашем проекте будет
    выглядеть так:

     <!-- Project information--> 
     <dependencies> 
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-devtools</artifactId> 
     <scope>runtime</scope> 
     <optional>true</optional> 
     </dependency> 
     <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
     <exclusions> 
     <exclusion> 
     <groupId>org.junit.vintage</groupId> 
     <artifactId>junit-vintage-engine</artifactId> 
     </exclusion> 
     </exclusions> 
     </dependency> 
     </dependencies> 
     <!-- Build information --> 
    

    Все сделанные вами настройки будут отражены в этом файле. Кроме того,
    автоматически настраиваются зависимости по умолчанию, базовый снимок
    0.0.1-SNAPSHOT и плагин сборки Maven.

    Для справки: если вы хотите создать проект Gradle , ваш
    build.gradle будет выглядеть так:

     plugins { 
     id 'org.springframework.boot' version '2.3.5.RELEASE' 
     id 'io.spring.dependency-management' version '1.0.10.RELEASE' 
     id 'java' 
     } 
     
     group = 'com.howto' 
     version = '0.0.1-SNAPSHOT' 
     sourceCompatibility = '11' 
     
     repositories { 
     mavenCentral() 
     } 
     
     dependencies { 
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
     implementation 'org.springframework.boot:spring-boot-starter-web' 
     developmentOnly 'org.springframework.boot:spring-boot-devtools' 
     runtimeOnly 'com.mysql:mysql-connector-java' 
     testImplementation('org.springframework.boot:spring-boot-starter-test') { 
     exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' 
     } 
     } 
     
     test { 
     useJUnitPlatform() 
     } 
    

    Подключение Spring Boot к базе данных

    Далее, прежде чем мы начнем работать над приложением, нам нужно
    настроить базу данных. Это легко сделать с помощью Spring Data JPA,
    который позволяет нам установить это соединение всего с парой
    параметров.

    Он абстрагируется от всего, что нужно сделать разработчику, и позволяет
    нам переключать базовые базы данных, если мы хотим, просто изменяя пару
    свойств.

    Чтобы сообщить Spring, как подключиться к предпочитаемой вами базе
    данных, в application.properties вам необходимо добавить некоторую
    элементарную информацию:

     spring.datasource.url = jdbc:mysql://localhost:3306/user 
     spring.datasource.username = user 
     spring.datasource.password = user 
     spring.jpa.hibernate.ddl-auto = update 
     spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 
    

    Здесь мы установили datasource.url на наш URL-адрес подключения JDBC.
    Это зависит от вашей базы данных. Мы предоставили username и
    password необходимые для аутентификации в этой базе данных, а также
    установили для ddl-auto значение update . Свойство
    jpa.hibernate.ddl-auto напрямую влияет на hibernate.hbm2ddl.auto и
    по существу определяет, как Hibernate должен обрабатывать управление
    инструментами схемы.

    Для производственных приложений это значение обычно установлено равным «
    none , так как специальный персонал управляет поведением. В разработке
    чаще всего используется update , позволяющее обновлять схему каждый
    раз при перезапуске приложения, что обеспечивает гибкость при работе над
    разработкой.

    Наконец, мы установили свойство hibernate.dialect Hibernate имеет
    разные диалекты для разных баз данных. Он может автоматически
    устанавливать диалект в зависимости от вашей конфигурации, хотя для
    дополнительной безопасности всегда рекомендуется указывать его явно.

    Модель домена — Создание модели пользователя

    Теперь, когда соединение с базой данных установлено и работает, мы можем
    перейти к модели предметной области . Это набор классов или, скорее,
    моделей , которые мы будем использовать в нашем приложении. В
    Hibernate они также называются Entities , а также аннотируются
    аннотацией @Entity

    Каждый @Entity Hibernate, для него создается таблица, отображаются
    поля, и он становится управляемым объектом для базы данных, которую вы
    настроили.

    Во-первых, давайте создадим простую сущность User Мы добавим к классу
    @Entity и необязательную @Table чтобы указать имя нашей таблицы.

    Если не установлен, он просто будет использовать то же имя, что и класс:

     @Entity 
     @Table(name = "user") 
     public class User { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private long id; 
     private String name; 
     
     // Constructor, getters and setters 
     } 
    

    Чтобы аннотировать поле как id объекта, вы используете @Id , и она
    будет установлена как автоматически увеличивающийся первичный ключ
    таблицы. Кроме того, вы можете дополнительно установить, что это
    @GeneratedValue и установить для GenerationType значение AUTO .

    Это настройка по умолчанию, если вы опустите аннотацию @GeneratedValue
    Вы также можете установить другие значения: IDENTITY , SEQUENCE и
    TABLE . Они требуют отдельной статьи о Hibernate.

    Кроме того, вы можете установить @Column для каждого из полей, указав
    имя для каждого из них, если вы хотите настраиваемые имена —
    @Column(name = "user_id") , сохранит поле id user_id а не просто
    id .

    Если вы хотите автоматизировать генерацию конструкторов, геттеров и
    сеттеров и просто полностью отказаться от шаблонного кода, вы можете
    использовать изящные инструменты, такие как
    Lombok .

    Этот класс (объект) теперь зарегистрирован в Hibernate. Если мы запустим
    приложение, учитывая нашу ddl-auto , таблица отобразится в вашей
    соответствующей базе данных с правильной таблицей и сопоставлениями для
    типов данных.

    Уровень сохраняемости — создание классов репозитория

    Далее поработаем над слоем постоянства. Нам понадобится UserRepository
    для выполнения операций CRUD с нашими объектами User Для этого мы
    укажем интерфейс, расширяющий CrudRepository , и аннотируем его с
    помощью @Repository .

    @Repository — это вариант @Component , которая сообщает Spring, что
    это компонент, которым должен управлять контейнер IoC. В частности,
    репозитории предназначены для определения логики уровня сохраняемости.

    CrudRepository CrudRepository принимает класс сущности, а также id
    он должен использовать для запроса:

     @Repository 
     public interface UserRepository extends CrudRepository<User, Long> {} 
    

    CrudRepository объявляет такие методы, как findAll() , findOne() и
    save() которые составляют базовую функциональность CRUD репозитория.
    Вы можете использовать этот UserRepository как есть, чтобы выполнять
    операции CRUD с User , без дополнительной настройки.

    Вы можете переопределить это поведение, если хотите, но оно будет
    настроено автоматически, чтобы помочь вам выполнить загрузку некоторых
    основных функций.

    Бизнес-уровень — Создание контроллера

    Наконец, мы дошли до бизнес-уровня, где мы реализуем фактическую
    бизнес-логику обработки информации и используем компоненты уровня
    сохраняемости вместе с моделью домена для хранения данных.

    Давайте создадим контроллер, @RestController его как @RestController,
    поскольку мы создаем REST API, и добавим к нему @RequestMapping
    @RestController — это просто комбинация @Controller и
    @ResponseBody , что означает, что вместо рендеринга страниц он просто
    ответит данными, которые мы ему предоставили. Это естественно для REST
    API — возврат информации после попадания в конечную точку API.

    Если вы хотите узнать больше о @RequestMapping и его производных
    вариантах , у нас
    есть отличная статья, посвященная именно этой теме!

    Давайте продолжим и UserController :

     @RestController 
     @RequestMapping("/api/user") 
     public class UserController { 
     
     @Autowired 
     private UserRepository userRepository; 
     
     @GetMapping 
     public List<User> findAllUsers() { 
     // Implement 
     } 
     
     @GetMapping("/{id}") 
     public ResponseEntity<User> findUserById(@PathVariable(value = "id") long id) { 
     // Implement 
     } 
     
     @PostMapping 
     public User saveUser(@Validated @RequestBody User user) { 
     // Implement 
     } 
     } 
    

    Мы @Autowired наш UserRepository . Он используется для внедрения
    зависимостей, поскольку класс репозитория здесь является зависимостью.
    Если вы хотите узнать больше об аннотациях Core Spring
    Framework ,
    ознакомьтесь с нашим руководством!

    Мы также использовали @GetMapping и @PostMapping чтобы указать,
    какие типы HTTP-запросов принимают и обрабатывают наши методы. Это
    производные варианты аннотации @RequestMapping
    method = RequestMethod.METHOD для соответствующих типов.

    Начнем с реализации конечной точки findAll()

     @GetMapping 
     public List<User> findAllUsers() { 
     return userRepository.findAll(); 
     } 
    

    Этот метод просто вызывает userRepository для findAll()
    пользователей и возвращает список в качестве ответа.

    Затем давайте реализуем конечную точку, чтобы получить каждого
    пользователя по их id :

     @GetMapping("/{id}") 
     public ResponseEntity<User> findUserById(@PathVariable(value = "id") long id) { 
     Optional<User> user = userRepository.findById(id); 
     
     if(user.isPresent()) { 
     return ResponseEntity.ok().body(user.get()); 
     } else { 
     return ResponseEntity.notFound().build(); 
     } 
     } 
    

    Объект с данным id может отсутствовать в базе данных, поэтому мы
    помещаем возвращенного User в Optional . Если вы хотите узнать
    больше о Optional в Java 8 , у нас есть
    подробное руководство!

    Затем, если используется user.isPresent() , мы возвращаем HTTP-ответ
    200 OK user экземпляр в качестве тела ответа. В противном случае мы
    возвращаем ResponseEntity.notFound() .

    Наконец, давайте создадим конечную точку для спасения пользователей:

     @PostMapping 
     public User saveUser(@Validated @RequestBody User user) { 
     return userRepository.save(user); 
     } 
    

    Метод save() из пользовательского репозитория сохраняет нового
    пользователя, если он еще не существует. Если пользователь с данным id
    уже существует, генерируется исключение. В случае успеха он возвращает
    постоянного пользователя.

    @Validated является валидатором для данных, которые мы предоставляем о
    пользователе, и обеспечивает базовую достоверность. Если информация о
    пользователе недействительна, данные не сохраняются. Кроме того,
    @RequestBody сопоставляет тело POST отправленного в конечную точку,
    с User мы хотели бы сохранить.

    Если вы хотите узнать больше о получении тела HTTP в Spring
    Boot , мы вам поможем!

    Теперь пора запустить приложение и проверить, работает ли оно.

    Компиляция, сборка и запуск

    Порт по умолчанию, на котором работает Spring Boot, — 8080 . Если вы
    хотите изменить порт по какой-либо причине, вы можете настроить его в
    своем файле application.properties

     server.port = 9090 
    

    Если у вас есть IDE, такая как IntelliJ, которая имеет обширную
    поддержку для запуска проектов Spring Boot, вы можете продолжить и
    запустить ее таким образом.

    Если нет, мы будем использовать командную строку для запуска нашего
    проекта. Мы можем запустить приложение напрямую, выполнив
    ./mvnw spring-boot:run (или ./gradlew bootRun если вы используете
    Gradle ) в командной строке из папки вашего базового проекта, где
    находится pom.xml

    Другой вариант — упаковать ваше приложение в jar и запустить его таким
    образом.

    Для этого нам просто нужно выполнить ./mvnw clean package ./mvnw (
    .gradlew build в Gradle) и запустить файл jar, выполнив эту команду:

     $ java -jar target/DemoUser-0.0.1-SNAPSHOT.jar 
    

    Если вы используете Gradle, путь к файлу jar будет другим:

     $ java -jar build/libs/DemoUser-0.0.1-SNAPSHOT.jar 
    

    Вы узнаете, когда ваше приложение успешно запустилось, если увидите эти
    журналы аудита в конце командной строки:

     2020-11-05 13:27:05.073 INFO 21796 --- [ restartedMain] osbdaOptionalLiveReloadServer : LiveReload server is running on port 35729 
     2020-11-05 13:27:05.108 INFO 21796 --- [ restartedMain] osbwembedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 
     2020-11-05 13:27:05.121 INFO 21796 --- [ restartedMain] com.howto.DemoUser.DemoUserApplication : Started DemoUserApplication in 1.765 seconds (JVM running for 2.236) 
    

    Тестирование API

    Теперь, когда ваше приложение запущено и работает на
    http://localhost:8080/ , мы можем протестировать конечные точки, чтобы
    убедиться, что они работают.

    Для GET мы можем использовать браузеры, curl или Postman — все, что
    вам удобнее.

    Давайте поразим конечную точку http://localhost:8080/api/user с
    помощью запроса GET

     $ curl http://localhost:8080/api/user 
    

    Или в адресной строке браузера перейдите по
    http://localhost:8080/api/user , и ваш браузер отобразит ответ JSON:

     [ 
     { 
     "id": 1, 
     "name":"John" 
     }, 
     { 
     "id": 2, 
     "name":"Jane" 
     }, 
     { 
     "id": 3, 
     "name": "Juan" 
     } 
     ] 
    

    Мы можем изменить этот URL, чтобы включить параметр пути, id чтобы
    получить конкретного пользователя. Отправим HTTP-запрос GET на
    http://localhost:8080/api/user/3 :

     { 
     "id": 3, 
     "name": "Juan" 
     } 
    

    Наконец, давайте отправим запрос HTTP POST и добавим пользователя в нашу
    базу данных, предоставив данные, необходимые в нашей модели. Поля в
    полезной нагрузке JSON должны совпадать с именами полей в нашей БД /
    модели:

     $ curl --location --request POST 'http://localhost:8080/api/user'  
     --header 'Content-Type: application/json'  
     --data-raw '{ "id": 4, "name": "Jason" }' 
    

    API вернет 200 в качестве ответа с этим в качестве тела ответа
    постоянного пользователя:

     { 
     "id": 4, 
     "name": "Jason" 
     } 
    

    Заключение

    Вот и все. Вы успешно создали свой собственный Spring Boot REST API!

    В этом руководстве мы создали полностью работающий проект Spring Boot,
    который предоставляет конечному пользователю API. Используя этот API,
    пользователь может выполнять операции CRUD с объектом User

    Мы рассмотрели модель домена , уровень сохраняемости , а также
    бизнес-уровень после настройки подключения к базе данных и настройки
    проекта.

    management.appoptics.metrics.export.api-token

    AppOptics API token.

    management.appoptics.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    500

    management.appoptics.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    5s

    management.appoptics.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.appoptics.metrics.export.floor-times

    Whether to ship a floored time, useful when sending measurements from multiple hosts to align them on a given time boundary.

    false

    management.appoptics.metrics.export.host-tag

    Tag that will be mapped to «@host» when shipping metrics to AppOptics.

    instance

    management.appoptics.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.appoptics.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.appoptics.metrics.export.uri

    URI to ship metrics to.

    https://api.appoptics.com/v1/measurements

    management.atlas.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.atlas.metrics.export.config-refresh-frequency

    Frequency for refreshing config settings from the LWC service.

    10s

    management.atlas.metrics.export.config-time-to-live

    Time to live for subscriptions from the LWC service.

    150s

    management.atlas.metrics.export.config-uri

    URI for the Atlas LWC endpoint to retrieve current subscriptions.

    http://localhost:7101/lwc/api/v1/expressions/local-dev

    management.atlas.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.atlas.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.atlas.metrics.export.eval-uri

    URI for the Atlas LWC endpoint to evaluate the data for a subscription.

    http://localhost:7101/lwc/api/v1/evaluate

    management.atlas.metrics.export.lwc-enabled

    Whether to enable streaming to Atlas LWC.

    false

    management.atlas.metrics.export.meter-time-to-live

    Time to live for meters that do not have any activity. After this period the meter will be considered expired and will not get reported.

    15m

    management.atlas.metrics.export.num-threads

    Number of threads to use with the metrics publishing scheduler.

    4

    management.atlas.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.atlas.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.atlas.metrics.export.uri

    URI of the Atlas server.

    http://localhost:7101/api/v1/publish

    management.auditevents.enabled

    Whether to enable storage of audit events.

    true

    management.cloudfoundry.enabled

    Whether to enable extended Cloud Foundry actuator endpoints.

    true

    management.cloudfoundry.skip-ssl-validation

    Whether to skip SSL verification for Cloud Foundry actuator endpoint security calls.

    false

    management.datadog.metrics.export.api-key

    Datadog API key.

    management.datadog.metrics.export.application-key

    Datadog application key. Not strictly required, but improves the Datadog experience by sending meter descriptions, types, and base units to Datadog.

    management.datadog.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.datadog.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.datadog.metrics.export.descriptions

    Whether to publish descriptions metadata to Datadog. Turn this off to minimize the amount of metadata sent.

    true

    management.datadog.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.datadog.metrics.export.host-tag

    Tag that will be mapped to «host» when shipping metrics to Datadog.

    instance

    management.datadog.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.datadog.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.datadog.metrics.export.uri

    URI to ship metrics to. Set this if you need to publish metrics to a Datadog site other than US, or to an internal proxy en-route to Datadog.

    https://api.datadoghq.com

    management.defaults.metrics.export.enabled

    Whether to enable default metrics exporters.

    true

    management.dynatrace.metrics.export.api-token

    Dynatrace authentication token.

    management.dynatrace.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.dynatrace.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.dynatrace.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.dynatrace.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.dynatrace.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.dynatrace.metrics.export.uri

    URI to ship metrics to. Should be used for SaaS, self-managed instances or to en-route through an internal proxy.

    management.dynatrace.metrics.export.v1.device-id

    ID of the custom device that is exporting metrics to Dynatrace.

    management.dynatrace.metrics.export.v1.group

    Group for exported metrics. Used to specify custom device group name in the Dynatrace UI.

    management.dynatrace.metrics.export.v1.technology-type

    Technology type for exported metrics. Used to group metrics under a logical technology name in the Dynatrace UI.

    java

    management.dynatrace.metrics.export.v2.default-dimensions.*

    Default dimensions that are added to all metrics in the form of key-value pairs. These are overwritten by Micrometer tags if they use the same key.

    management.dynatrace.metrics.export.v2.enrich-with-dynatrace-metadata

    Whether to enable Dynatrace metadata export.

    true

    management.dynatrace.metrics.export.v2.metric-key-prefix

    Prefix string that is added to all exported metrics.

    management.dynatrace.metrics.export.v2.use-dynatrace-summary-instruments

    Whether to fall back to the built-in micrometer instruments for Timer and DistributionSummary.

    true

    management.elastic.metrics.export.api-key-credentials

    Base64-encoded credentials string. Mutually exclusive with user-name and password.

    management.elastic.metrics.export.auto-create-index

    Whether to create the index automatically if it does not exist.

    true

    management.elastic.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.elastic.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.elastic.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.elastic.metrics.export.host

    Host to export metrics to.

    http://localhost:9200

    management.elastic.metrics.export.index

    Index to export metrics to.

    micrometer-metrics

    management.elastic.metrics.export.index-date-format

    Index date format used for rolling indices. Appended to the index name.

    yyyy-MM

    management.elastic.metrics.export.index-date-separator

    Prefix to separate the index name from the date format used for rolling indices.

    -

    management.elastic.metrics.export.password

    Login password of the Elastic server. Mutually exclusive with api-key-credentials.

    management.elastic.metrics.export.pipeline

    Ingest pipeline name. By default, events are not pre-processed.

    management.elastic.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.elastic.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.elastic.metrics.export.timestamp-field-name

    Name of the timestamp field.

    @timestamp

    management.elastic.metrics.export.user-name

    Login user of the Elastic server. Mutually exclusive with api-key-credentials.

    management.endpoint.auditevents.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.auditevents.enabled

    Whether to enable the auditevents endpoint.

    true

    management.endpoint.beans.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.beans.enabled

    Whether to enable the beans endpoint.

    true

    management.endpoint.caches.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.caches.enabled

    Whether to enable the caches endpoint.

    true

    management.endpoint.conditions.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.conditions.enabled

    Whether to enable the conditions endpoint.

    true

    management.endpoint.configprops.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.configprops.enabled

    Whether to enable the configprops endpoint.

    true

    management.endpoint.configprops.roles

    Roles used to determine whether a user is authorized to be shown unsanitized values. When empty, all authenticated users are authorized.

    management.endpoint.configprops.show-values

    When to show unsanitized values.

    management.endpoint.env.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.env.enabled

    Whether to enable the env endpoint.

    true

    management.endpoint.env.roles

    Roles used to determine whether a user is authorized to be shown unsanitized values. When empty, all authenticated users are authorized.

    management.endpoint.env.show-values

    When to show unsanitized values.

    management.endpoint.flyway.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.flyway.enabled

    Whether to enable the flyway endpoint.

    true

    management.endpoint.health.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.health.enabled

    Whether to enable the health endpoint.

    true

    management.endpoint.health.group.*

    Health endpoint groups.

    management.endpoint.health.logging.slow-indicator-threshold

    Threshold after which a warning will be logged for slow health indicators.

    10s

    management.endpoint.health.probes.add-additional-paths

    Whether to make the liveness and readiness health groups available on the main server port.

    false

    management.endpoint.health.probes.enabled

    Whether to enable liveness and readiness probes.

    false

    management.endpoint.health.roles

    Roles used to determine whether a user is authorized to be shown details. When empty, all authenticated users are authorized.

    management.endpoint.health.show-components

    When to show components. If not specified the ‘show-details’ setting will be used.

    management.endpoint.health.show-details

    When to show full health details.

    never

    management.endpoint.health.status.http-mapping.*

    Mapping of health statuses to HTTP status codes. By default, registered health statuses map to sensible defaults (for example, UP maps to 200).

    management.endpoint.health.status.order

    Comma-separated list of health statuses in order of severity.

    [DOWN, OUT_OF_SERVICE, UP, UNKNOWN]

    management.endpoint.heapdump.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.heapdump.enabled

    Whether to enable the heapdump endpoint.

    true

    management.endpoint.httpexchanges.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.httpexchanges.enabled

    Whether to enable the httpexchanges endpoint.

    true

    management.endpoint.info.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.info.enabled

    Whether to enable the info endpoint.

    true

    management.endpoint.integrationgraph.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.integrationgraph.enabled

    Whether to enable the integrationgraph endpoint.

    true

    management.endpoint.liquibase.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.liquibase.enabled

    Whether to enable the liquibase endpoint.

    true

    management.endpoint.logfile.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.logfile.enabled

    Whether to enable the logfile endpoint.

    true

    management.endpoint.logfile.external-file

    External Logfile to be accessed. Can be used if the logfile is written by output redirect and not by the logging system itself.

    management.endpoint.loggers.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.loggers.enabled

    Whether to enable the loggers endpoint.

    true

    management.endpoint.mappings.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.mappings.enabled

    Whether to enable the mappings endpoint.

    true

    management.endpoint.metrics.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.metrics.enabled

    Whether to enable the metrics endpoint.

    true

    management.endpoint.prometheus.enabled

    Whether to enable the prometheus endpoint.

    true

    management.endpoint.quartz.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.quartz.enabled

    Whether to enable the quartz endpoint.

    true

    management.endpoint.quartz.roles

    Roles used to determine whether a user is authorized to be shown unsanitized job or trigger values. When empty, all authenticated users are authorized.

    management.endpoint.quartz.show-values

    When to show unsanitized job or trigger values.

    management.endpoint.scheduledtasks.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.scheduledtasks.enabled

    Whether to enable the scheduledtasks endpoint.

    true

    management.endpoint.sessions.enabled

    Whether to enable the sessions endpoint.

    true

    management.endpoint.shutdown.enabled

    Whether to enable the shutdown endpoint.

    false

    management.endpoint.startup.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.startup.enabled

    Whether to enable the startup endpoint.

    true

    management.endpoint.threaddump.cache.time-to-live

    Maximum time that a response can be cached.

    0ms

    management.endpoint.threaddump.enabled

    Whether to enable the threaddump endpoint.

    true

    management.endpoints.enabled-by-default

    Whether to enable or disable all endpoints by default.

    management.endpoints.jackson.isolated-object-mapper

    Whether to use an isolated object mapper to serialize endpoint JSON.

    true

    management.endpoints.jmx.domain

    Endpoints JMX domain name. Fallback to ‘spring.jmx.default-domain’ if set.

    org.springframework.boot

    management.endpoints.jmx.exposure.exclude

    Endpoint IDs that should be excluded or ‘*’ for all.

    management.endpoints.jmx.exposure.include

    Endpoint IDs that should be included or ‘*’ for all.

    health

    management.endpoints.jmx.static-names

    Additional static properties to append to all ObjectNames of MBeans representing Endpoints.

    management.endpoints.migrate-legacy-ids

    Whether to transparently migrate legacy endpoint IDs.

    false

    management.endpoints.web.base-path

    Base path for Web endpoints. Relative to the servlet context path (server.servlet.context-path) or WebFlux base path (spring.webflux.base-path) when the management server is sharing the main server port. Relative to the management server base path (management.server.base-path) when a separate management server port (management.server.port) is configured.

    /actuator

    management.endpoints.web.cors.allow-credentials

    Whether credentials are supported. When not set, credentials are not supported.

    management.endpoints.web.cors.allowed-headers

    Comma-separated list of headers to allow in a request. ‘*’ allows all headers.

    management.endpoints.web.cors.allowed-methods

    Comma-separated list of methods to allow. ‘*’ allows all methods. When not set, defaults to GET.

    management.endpoints.web.cors.allowed-origin-patterns

    Comma-separated list of origin patterns to allow. Unlike allowed origins which only supports ‘*’, origin patterns are more flexible (for example ‘https://*.example.com’) and can be used when credentials are allowed. When no allowed origin patterns or allowed origins are set, CORS support is disabled.

    management.endpoints.web.cors.allowed-origins

    Comma-separated list of origins to allow. ‘*’ allows all origins. When credentials are allowed, ‘*’ cannot be used and origin patterns should be configured instead. When no allowed origins or allowed origin patterns are set, CORS support is disabled.

    management.endpoints.web.cors.exposed-headers

    Comma-separated list of headers to include in a response.

    management.endpoints.web.cors.max-age

    How long the response from a pre-flight request can be cached by clients. If a duration suffix is not specified, seconds will be used.

    1800s

    management.endpoints.web.discovery.enabled

    Whether the discovery page is enabled.

    true

    management.endpoints.web.exposure.exclude

    Endpoint IDs that should be excluded or ‘*’ for all.

    management.endpoints.web.exposure.include

    Endpoint IDs that should be included or ‘*’ for all.

    [health]

    management.endpoints.web.path-mapping.*

    Mapping between endpoint IDs and the path that should expose them.

    management.ganglia.metrics.export.addressing-mode

    UDP addressing mode, either unicast or multicast.

    multicast

    management.ganglia.metrics.export.duration-units

    Base time unit used to report durations.

    milliseconds

    management.ganglia.metrics.export.enabled

    Whether exporting of metrics to Ganglia is enabled.

    true

    management.ganglia.metrics.export.host

    Host of the Ganglia server to receive exported metrics.

    localhost

    management.ganglia.metrics.export.port

    Port of the Ganglia server to receive exported metrics.

    8649

    management.ganglia.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.ganglia.metrics.export.time-to-live

    Time to live for metrics on Ganglia. Set the multicast Time-To-Live to be one greater than the number of hops (routers) between the hosts.

    1

    management.graphite.metrics.export.duration-units

    Base time unit used to report durations.

    milliseconds

    management.graphite.metrics.export.enabled

    Whether exporting of metrics to Graphite is enabled.

    true

    management.graphite.metrics.export.graphite-tags-enabled

    Whether Graphite tags should be used, as opposed to a hierarchical naming convention. Enabled by default unless «tagsAsPrefix» is set.

    management.graphite.metrics.export.host

    Host of the Graphite server to receive exported metrics.

    localhost

    management.graphite.metrics.export.port

    Port of the Graphite server to receive exported metrics.

    2004

    management.graphite.metrics.export.protocol

    Protocol to use while shipping data to Graphite.

    pickled

    management.graphite.metrics.export.rate-units

    Base time unit used to report rates.

    seconds

    management.graphite.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.graphite.metrics.export.tags-as-prefix

    For the hierarchical naming convention, turn the specified tag keys into part of the metric prefix. Ignored if «graphiteTagsEnabled» is true.

    []

    management.health.cassandra.enabled

    Whether to enable Cassandra health check.

    true

    management.health.couchbase.enabled

    Whether to enable Couchbase health check.

    true

    management.health.db.enabled

    Whether to enable database health check.

    true

    management.health.db.ignore-routing-data-sources

    Whether to ignore AbstractRoutingDataSources when creating database health indicators.

    false

    management.health.defaults.enabled

    Whether to enable default health indicators.

    true

    management.health.diskspace.enabled

    Whether to enable disk space health check.

    true

    management.health.diskspace.path

    Path used to compute the available disk space.

    management.health.diskspace.threshold

    Minimum disk space that should be available.

    10MB

    management.health.elasticsearch.enabled

    Whether to enable Elasticsearch health check.

    true

    management.health.influxdb.enabled

    Whether to enable InfluxDB health check.

    true

    management.health.jms.enabled

    Whether to enable JMS health check.

    true

    management.health.ldap.enabled

    Whether to enable LDAP health check.

    true

    management.health.livenessstate.enabled

    Whether to enable liveness state health check.

    false

    management.health.mail.enabled

    Whether to enable Mail health check.

    true

    management.health.mongo.enabled

    Whether to enable MongoDB health check.

    true

    management.health.neo4j.enabled

    Whether to enable Neo4j health check.

    true

    management.health.ping.enabled

    Whether to enable ping health check.

    true

    management.health.rabbit.enabled

    Whether to enable RabbitMQ health check.

    true

    management.health.readinessstate.enabled

    Whether to enable readiness state health check.

    false

    management.health.redis.enabled

    Whether to enable Redis health check.

    true

    management.httpexchanges.recording.enabled

    Whether to enable HTTP request-response exchange recording.

    true

    management.httpexchanges.recording.include

    Items to be included in the exchange recording. Defaults to request headers (excluding Authorization and Cookie), response headers (excluding Set-Cookie), and time taken.

    [request-headers, response-headers, errors]

    management.humio.metrics.export.api-token

    Humio API token.

    management.humio.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.humio.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    5s

    management.humio.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.humio.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.humio.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.humio.metrics.export.tags.*

    Humio tags describing the data source in which metrics will be stored. Humio tags are a distinct concept from Micrometer’s tags. Micrometer’s tags are used to divide metrics along dimensional boundaries.

    management.humio.metrics.export.uri

    URI to ship metrics to. If you need to publish metrics to an internal proxy en-route to Humio, you can define the location of the proxy with this.

    https://cloud.humio.com

    management.influx.metrics.export.api-version

    API version of InfluxDB to use. Defaults to ‘v1’ unless an org is configured. If an org is configured, defaults to ‘v2’.

    management.influx.metrics.export.auto-create-db

    Whether to create the Influx database if it does not exist before attempting to publish metrics to it. InfluxDB v1 only.

    true

    management.influx.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.influx.metrics.export.bucket

    Bucket for metrics. Use either the bucket name or ID. Defaults to the value of the db property if not set. InfluxDB v2 only.

    management.influx.metrics.export.compressed

    Whether to enable GZIP compression of metrics batches published to Influx.

    true

    management.influx.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.influx.metrics.export.consistency

    Write consistency for each point.

    one

    management.influx.metrics.export.db

    Database to send metrics to. InfluxDB v1 only.

    mydb

    management.influx.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.influx.metrics.export.org

    Org to write metrics to. InfluxDB v2 only.

    management.influx.metrics.export.password

    Login password of the Influx server. InfluxDB v1 only.

    management.influx.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.influx.metrics.export.retention-duration

    Time period for which Influx should retain data in the current database. For instance 7d, check the influx documentation for more details on the duration format. InfluxDB v1 only.

    management.influx.metrics.export.retention-policy

    Retention policy to use (Influx writes to the DEFAULT retention policy if one is not specified). InfluxDB v1 only.

    management.influx.metrics.export.retention-replication-factor

    How many copies of the data are stored in the cluster. Must be 1 for a single node instance. InfluxDB v1 only.

    management.influx.metrics.export.retention-shard-duration

    Time range covered by a shard group. For instance 2w, check the influx documentation for more details on the duration format. InfluxDB v1 only.

    management.influx.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.influx.metrics.export.token

    Authentication token to use with calls to the InfluxDB backend. For InfluxDB v1, the Bearer scheme is used. For v2, the Token scheme is used.

    management.influx.metrics.export.uri

    URI of the Influx server.

    http://localhost:8086

    management.influx.metrics.export.user-name

    Login user of the Influx server. InfluxDB v1 only.

    management.info.build.enabled

    Whether to enable build info.

    true

    management.info.defaults.enabled

    Whether to enable default info contributors.

    true

    management.info.env.enabled

    Whether to enable environment info.

    false

    management.info.git.enabled

    Whether to enable git info.

    true

    management.info.git.mode

    Mode to use to expose git information.

    simple

    management.info.java.enabled

    Whether to enable Java info.

    false

    management.info.os.enabled

    Whether to enable Operating System info.

    false

    management.jmx.metrics.export.domain

    Metrics JMX domain name.

    metrics

    management.jmx.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.jmx.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.kairos.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.kairos.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.kairos.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.kairos.metrics.export.password

    Login password of the KairosDB server.

    management.kairos.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.kairos.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.kairos.metrics.export.uri

    URI of the KairosDB server.

    http://localhost:8080/api/v1/datapoints

    management.kairos.metrics.export.user-name

    Login user of the KairosDB server.

    management.metrics.data.repository.autotime.enabled

    Whether to enable auto-timing.

    true

    management.metrics.data.repository.autotime.percentiles

    Percentiles for which additional time series should be published.

    management.metrics.data.repository.autotime.percentiles-histogram

    Whether to publish percentile histrograms.

    false

    management.metrics.data.repository.metric-name

    Name of the metric for sent requests.

    spring.data.repository.invocations

    management.metrics.distribution.buffer-length.*

    Number of histograms for meter IDs starting with the specified name to keep in the ring buffer. The longest match wins, the key `all` can also be used to configure all meters.

    management.metrics.distribution.expiry.*

    Maximum amount of time that samples for meter IDs starting with the specified name are accumulated to decaying distribution statistics before they are reset and rotated. The longest match wins, the key `all` can also be used to configure all meters.

    management.metrics.distribution.maximum-expected-value.*

    Maximum value that meter IDs starting with the specified name are expected to observe. The longest match wins. Values can be specified as a double or as a Duration value (for timer meters, defaulting to ms if no unit specified).

    management.metrics.distribution.minimum-expected-value.*

    Minimum value that meter IDs starting with the specified name are expected to observe. The longest match wins. Values can be specified as a double or as a Duration value (for timer meters, defaulting to ms if no unit specified).

    management.metrics.distribution.percentiles.*

    Specific computed non-aggregable percentiles to ship to the backend for meter IDs starting-with the specified name. The longest match wins, the key ‘all’ can also be used to configure all meters.

    management.metrics.distribution.percentiles-histogram.*

    Whether meter IDs starting with the specified name should publish percentile histograms. For monitoring systems that support aggregable percentile calculation based on a histogram, this can be set to true. For other systems, this has no effect. The longest match wins, the key ‘all’ can also be used to configure all meters.

    management.metrics.distribution.slo.*

    Specific service-level objective boundaries for meter IDs starting with the specified name. The longest match wins. Counters will be published for each specified boundary. Values can be specified as a double or as a Duration value (for timer meters, defaulting to ms if no unit specified).

    management.metrics.enable.*

    Whether meter IDs starting with the specified name should be enabled. The longest match wins, the key ‘all’ can also be used to configure all meters.

    management.metrics.mongo.command.enabled

    Whether to enable Mongo client command metrics.

    true

    management.metrics.mongo.connectionpool.enabled

    Whether to enable Mongo connection pool metrics.

    true

    management.metrics.system.diskspace.paths

    Comma-separated list of paths to report disk metrics for.

    [.]

    management.metrics.tags.*

    Common tags that are applied to every meter.

    management.metrics.use-global-registry

    Whether auto-configured MeterRegistry implementations should be bound to the global static registry on Metrics. For testing, set this to ‘false’ to maximize test independence.

    true

    management.metrics.web.client.max-uri-tags

    Maximum number of unique URI tag values allowed. After the max number of tag values is reached, metrics with additional tag values are denied by filter.

    100

    management.metrics.web.server.max-uri-tags

    Maximum number of unique URI tag values allowed. After the max number of tag values is reached, metrics with additional tag values are denied by filter.

    100

    management.newrelic.metrics.export.account-id

    New Relic account ID.

    management.newrelic.metrics.export.api-key

    New Relic API key.

    management.newrelic.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.newrelic.metrics.export.client-provider-type

    Client provider type to use.

    management.newrelic.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.newrelic.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.newrelic.metrics.export.event-type

    The event type that should be published. This property will be ignored if ‘meter-name-event-type-enabled’ is set to ‘true’.

    SpringBootSample

    management.newrelic.metrics.export.meter-name-event-type-enabled

    Whether to send the meter name as the event type instead of using the ‘event-type’ configuration property value. Can be set to ‘true’ if New Relic guidelines are not being followed or event types consistent with previous Spring Boot releases are required.

    false

    management.newrelic.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.newrelic.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.newrelic.metrics.export.uri

    URI to ship metrics to.

    https://insights-collector.newrelic.com

    management.observations.http.client.requests.name

    Name of the observation for client requests. If empty, will use the default «http.client.requests».

    management.observations.http.server.requests.name

    Name of the observation for server requests. If empty, will use the default «http.server.requests».

    management.otlp.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.otlp.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.otlp.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.otlp.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.otlp.metrics.export.resource-attributes.*

    Monitored resource’s attributes.

    management.otlp.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.otlp.metrics.export.url

    URI of the OLTP server.

    http://localhost:4318/v1/metrics

    management.prometheus.metrics.export.descriptions

    Whether to enable publishing descriptions as part of the scrape payload to Prometheus. Turn this off to minimize the amount of data sent on each scrape.

    true

    management.prometheus.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.prometheus.metrics.export.histogram-flavor

    Histogram type for backing DistributionSummary and Timer.

    prometheus

    management.prometheus.metrics.export.pushgateway.base-url

    Base URL for the Pushgateway.

    http://localhost:9091

    management.prometheus.metrics.export.pushgateway.enabled

    Enable publishing over a Prometheus Pushgateway.

    false

    management.prometheus.metrics.export.pushgateway.grouping-key.*

    Grouping key for the pushed metrics.

    management.prometheus.metrics.export.pushgateway.job

    Job identifier for this application instance.

    management.prometheus.metrics.export.pushgateway.password

    Login password of the Prometheus Pushgateway.

    management.prometheus.metrics.export.pushgateway.push-rate

    Frequency with which to push metrics.

    1m

    management.prometheus.metrics.export.pushgateway.shutdown-operation

    Operation that should be performed on shutdown.

    none

    management.prometheus.metrics.export.pushgateway.username

    Login user of the Prometheus Pushgateway.

    management.prometheus.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.server.add-application-context-header

    Add the «X-Application-Context» HTTP header in each response.

    false

    management.server.address

    Network address to which the management endpoints should bind. Requires a custom management.server.port.

    management.server.base-path

    Management endpoint base path (for instance, ‘/management’). Requires a custom management.server.port.

    management.server.port

    Management endpoint HTTP port (uses the same port as the application by default). Configure a different port to use management-specific SSL.

    management.server.ssl.certificate

    Path to a PEM-encoded SSL certificate file.

    management.server.ssl.certificate-private-key

    Path to a PEM-encoded private key file for the SSL certificate.

    management.server.ssl.ciphers

    Supported SSL ciphers.

    management.server.ssl.client-auth

    Client authentication mode. Requires a trust store.

    management.server.ssl.enabled

    Whether to enable SSL support.

    true

    management.server.ssl.enabled-protocols

    Enabled SSL protocols.

    management.server.ssl.key-alias

    Alias that identifies the key in the key store.

    management.server.ssl.key-password

    Password used to access the key in the key store.

    management.server.ssl.key-store

    Path to the key store that holds the SSL certificate (typically a jks file).

    management.server.ssl.key-store-password

    Password used to access the key store.

    management.server.ssl.key-store-provider

    Provider for the key store.

    management.server.ssl.key-store-type

    Type of the key store.

    management.server.ssl.protocol

    SSL protocol to use.

    TLS

    management.server.ssl.trust-certificate

    Path to a PEM-encoded SSL certificate authority file.

    management.server.ssl.trust-certificate-private-key

    Path to a PEM-encoded private key file for the SSL certificate authority.

    management.server.ssl.trust-store

    Trust store that holds SSL certificates.

    management.server.ssl.trust-store-password

    Password used to access the trust store.

    management.server.ssl.trust-store-provider

    Provider for the trust store.

    management.server.ssl.trust-store-type

    Type of the trust store.

    management.signalfx.metrics.export.access-token

    SignalFX access token.

    management.signalfx.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.signalfx.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.signalfx.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.signalfx.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.signalfx.metrics.export.source

    Uniquely identifies the app instance that is publishing metrics to SignalFx. Defaults to the local host name.

    management.signalfx.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    10s

    management.signalfx.metrics.export.uri

    URI to ship metrics to.

    https://ingest.signalfx.com

    management.simple.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.simple.metrics.export.mode

    Counting mode.

    cumulative

    management.simple.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.stackdriver.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.stackdriver.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.stackdriver.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.stackdriver.metrics.export.project-id

    Identifier of the Google Cloud project to monitor.

    management.stackdriver.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.stackdriver.metrics.export.resource-labels.*

    Monitored resource’s labels.

    management.stackdriver.metrics.export.resource-type

    Monitored resource type.

    global

    management.stackdriver.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.stackdriver.metrics.export.use-semantic-metric-types

    Whether to use semantically correct metric types. When false, counter metrics are published as the GAUGE MetricKind. When true, counter metrics are published as the CUMULATIVE MetricKind.

    false

    management.statsd.metrics.export.buffered

    Whether measurements should be buffered before sending to the StatsD server.

    true

    management.statsd.metrics.export.enabled

    Whether exporting of metrics to StatsD is enabled.

    true

    management.statsd.metrics.export.flavor

    StatsD line protocol to use.

    datadog

    management.statsd.metrics.export.host

    Host of the StatsD server to receive exported metrics.

    localhost

    management.statsd.metrics.export.max-packet-length

    Total length of a single payload should be kept within your network’s MTU.

    1400

    management.statsd.metrics.export.polling-frequency

    How often gauges will be polled. When a gauge is polled, its value is recalculated and if the value has changed (or publishUnchangedMeters is true), it is sent to the StatsD server.

    10s

    management.statsd.metrics.export.port

    Port of the StatsD server to receive exported metrics.

    8125

    management.statsd.metrics.export.protocol

    Protocol of the StatsD server to receive exported metrics.

    udp

    management.statsd.metrics.export.publish-unchanged-meters

    Whether to send unchanged meters to the StatsD server.

    true

    management.statsd.metrics.export.step

    Step size to use in computing windowed statistics like max. To get the most out of these statistics, align the step interval to be close to your scrape interval.

    1m

    management.tracing.baggage.correlation.enabled

    Whether to enable correlation of the baggage context with logging contexts.

    true

    management.tracing.baggage.correlation.fields

    List of fields that should be correlated with the logging context. That means that these fields would end up as key-value pairs in e.g. MDC.

    management.tracing.baggage.enabled

    Whether to enable Micrometer Tracing baggage propagation.

    true

    management.tracing.baggage.remote-fields

    List of fields that are referenced the same in-process as it is on the wire. For example, the field «x-vcap-request-id» would be set as-is including the prefix.

    management.tracing.enabled

    Whether auto-configuration of tracing is enabled.

    true

    management.tracing.propagation.type

    Tracing context propagation type.

    W3C

    management.tracing.sampling.probability

    Probability in the range from 0.0 to 1.0 that a trace will be sampled.

    0.1

    management.wavefront.api-token

    API token used when publishing metrics and traces directly to the Wavefront API host.

    management.wavefront.application.cluster-name

    Wavefront Cluster name used in ApplicationTags.

    management.wavefront.application.name

    Wavefront ‘Application’ name used in ApplicationTags.

    unnamed_application

    management.wavefront.application.service-name

    Wavefront ‘Service’ name used in ApplicationTags, falling back to ‘spring.application.name’. If both are unset it defaults to ‘unnamed_service’.

    management.wavefront.application.shard-name

    Wavefront Shard name used in ApplicationTags.

    management.wavefront.metrics.export.batch-size

    Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.

    10000

    management.wavefront.metrics.export.connect-timeout

    Connection timeout for requests to this backend.

    1s

    management.wavefront.metrics.export.enabled

    Whether exporting of metrics to this backend is enabled.

    true

    management.wavefront.metrics.export.global-prefix

    Global prefix to separate metrics originating from this app’s instrumentation from those originating from other Wavefront integrations when viewed in the Wavefront UI.

    management.wavefront.metrics.export.read-timeout

    Read timeout for requests to this backend.

    10s

    management.wavefront.metrics.export.step

    Step size (i.e. reporting frequency) to use.

    1m

    management.wavefront.sender.batch-size

    Number of measurements per request to use for Wavefront. If more measurements are found, then multiple requests will be made.

    10000

    management.wavefront.sender.flush-interval

    Flush interval to send queued messages.

    1s

    management.wavefront.sender.max-queue-size

    Maximum size of queued messages.

    50000

    management.wavefront.sender.message-size

    Maximum size of a message.

    management.wavefront.source

    Unique identifier for the app instance that is the source of metrics and traces being published to Wavefront. Defaults to the local host name.

    management.wavefront.trace-derived-custom-tag-keys

    Customized span tags for RED metrics.

    management.wavefront.uri

    URI to ship metrics and traces to.

    https://longboard.wavefront.com

    management.zipkin.tracing.connect-timeout

    Connection timeout for requests to Zipkin.

    1s

    management.zipkin.tracing.endpoint

    URL to the Zipkin API.

    http://localhost:9411/api/v2/spans

    management.zipkin.tracing.read-timeout

    Read timeout for requests to Zipkin.

    10s

    Понравилась статья? Поделить с друзьями:
  • 35ас 013 руководство по ремонту
  • Энтерол инструкция по применению взрослым капсулы для чего отзывы врачей
  • Военный комиссариат республики мордовия официальный сайт руководство
  • Wireless bluetooth headset наушники беспроводные инструкция на русском
  • Омекорд мик инструкция по применению цена