Сообщения

Показаны сообщения с ярлыком "Spring Boot"

Установка приложений Spring Boot: установка в качестве службы systemd

Изображение
systemd является преемником системы инициализации System V и в настоящее время используется во многих современных дистрибутивах Linux. Хотя вы можете продолжать использовать сценарии init.d с systemd, также можно запускать приложения Spring Boot с помощью systemd ‘service’ сценариев. Предполагая, что у вас установлено приложение Spring Boot в /var/myapp, чтобы установить приложение Spring Boot в качестве службы systemd, создайте сценарий с именем myapp.service и поместите его в каталог /etc/systemd/system. Следующий скрипт предлагает пример: [Unit] Description=myapp After=syslog.target [Service] User=myapp ExecStart=/var/myapp/myapp.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target Не забудьте изменить поля Description, User и ExecStart для вашего приложения. Поле ExecStart не объявляет команду действия сценария, что означает, что команда запуска используется по умолчанию. Обратите внимание, что, в отличие от запуска в качестве службы init.d, пользователь, кото...

Установка приложений Spring Boot: установка в качестве службы init.d (System V)

Изображение
Приложение Spring Boot можно легко запустить как сервисы Unix/Linux с помощью init.d или systemd. Если вы сконфигурировали подключаемый модуль Spring Boot Maven или Gradle для создания полностью исполняемого jar-файла и не используете настраиваемый внедренный LaunchScript, ваше приложение можно использовать в качестве службы init.d. Для этого сделайте символическую ссылку на jar-файл с init.d для поддержки стандартных команд start, stop, restart и status. Скрипт поддерживает следующие функции: Запускает сервисы как пользователь, которому принадлежит файл jar Отслеживает PID приложения с помощью /var/run/<appname>/<appname>.pid Записывает журналы консоли в /var/log/<appname>.log Предполагая, что у вас установлено приложение Spring Boot в /var/myapp, чтобы установить приложение Spring Boot в качестве службы init.d, создайте символическую ссылку следующим образом: $ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp После установки вы можете запускать и ост...

Установка приложений Spring Boot: полностью исполняемый jar в Unix

Изображение
Помимо запуска приложений Spring Boot с использованием java -jar, также можно создавать полностью исполняемые приложения для систем Unix. Полностью исполняемый jar может быть выполнен как любой другой исполняемый двоичный файл или он может быть зарегистрирован в init.d или systemd. Это упрощает установку и управление приложениями Spring Boot в обычных производственных средах. Полностью исполняемые файлы jar работают путем встраивания дополнительного скрипта в начало файла. В настоящее время некоторые инструменты не принимают этот формат, поэтому вы не всегда сможете использовать эту технику. Например, jar -xf может молча не извлечь jar или war, которые были сделаны полностью исполняемыми. Рекомендуется сделать jar или war полностью исполняемым только в том случае, если вы намерены выполнять его напрямую, а не запускать его с помощью java -jar или развертывать его в контейнере сервлета. Файл jar в формате zip64 нельзя сделать полностью исполняемым. Попытка сделать это приведет к тому,...

Spring Boot: развертывание в облаке, Google Cloud

Изображение
В Google Cloud есть несколько опций, которые можно использовать для запуска приложений Spring Boot. Возможно, проще всего начать с App Engine, но вы также можете найти способы запуска Spring Boot в контейнере с Container Engine или на виртуальной машине с Compute Engine. Для запуска в App Engine вы можете сначала создать проект в пользовательском интерфейсе, который устанавливает для вас уникальный идентификатор, а также настраивает маршруты HTTP. Добавьте приложение Java в проект и оставьте его пустым, а затем используйте Google Cloud SDK, чтобы вставить приложение Spring Boot в этот слот из командной строки или сборки CI. Стандарт App Engine требует, чтобы вы использовали упаковку WAR. Выполните следующие действия , чтобы развернуть стандартное приложение App Engine в Google Cloud. Кроме того, App Engine Flex требует создания файла app.yaml для описания ресурсов, необходимых для вашего приложения. Обычно вы помещаете этот файл в src/main/appengine, и он должен выглядеть следующим ...

Spring Boot: развертывание в облаке, Boxfuse и Amazon Web Services

Изображение
Boxfuse работает, превращая исполняемый jar или war Spring Boot в минимальный образ виртуальной машины, который можно развернуть без изменений либо в VirtualBox, либо в AWS. Boxfuse поставляется с глубокой интеграцией для Spring Boot и использует информацию из вашего файла конфигурации Spring Boot для автоматической настройки портов и URL-адресов проверки работоспособности (health check). Boxfuse использует эту информацию как для образов, которые он создает, так и для всех ресурсов, которые он предоставляет (экземпляры, группы безопасности, эластичные балансировщики нагрузки и т. д.). После того как вы создали учетную запись Boxfuse, подключили ее к своей учетной записи AWS, установили последнюю версию клиента Boxfuse и убедились, что приложение было создано Maven или Gradle (с помощью, например, mvn clean package), вы можете развернуть приложение Spring Boot в AWS с помощью команды, аналогичной следующей: $ boxfuse run myapp-1.0.jar -env=prod Если в текущем каталоге присутству...

Spring Boot: развертывание в облаке, Heroku

Изображение
Heroku - еще одна популярная PaaS платформа. Для настройки сборок Heroku вы предоставляете Procfile, который обеспечивает incantation, необходимое для развертывания приложения. Heroku назначает порт для использования приложением Java, а затем гарантирует, что маршрутизация на внешний URI работает. Вы должны настроить приложение для прослушивания на правильном порту. В следующем примере показан Procfile для нашего начального REST-приложения: web: java -Dserver.port=$PORT -jar target/demo-0.0.1-SNAPSHOT.jar Spring Boot делает аргументы -D доступными в качестве свойств, доступных из экземпляра Spring Environment. Свойство конфигурации server.port передается встроенному экземпляру Tomcat, Jetty или Undertow, который затем использует порт при запуске. Переменная окружения $PORT присваивается нам Heroku PaaS. Это должно быть все, что вам нужно. Наиболее распространенный рабочий процесс развертывания для развертываний Heroku - это отправка (git push) кода в производственный режим, ка...

Spring Boot: развертывание в облаке, Cloud Foundry

Изображение
Cloud Foundry предоставляет пакеты сборки (buildpack) по умолчанию, которые вступают в игру, если не указан другой пакет сборки. Сборка Java Cloud Foundry имеет отличную поддержку приложений Spring, включая Spring Boot. Вы можете развернуть как автономные исполняемые jar-приложения, так и традиционные .war-упакованные приложения. После того как вы скомпилировали свое приложение (например, с помощью mvn clean package) и установили инструмент командной строки cf, разверните его с помощью команды cf push, подставив путь к скомпилированному файлу .jar. Обязательно войдите в систему с помощью клиента командной строки cf, прежде чем отправлять приложение. В следующей строке показано использование команды cf push для развертывания приложения: $ cf push acloudyspringtime -p target/demo-0.0.1-SNAPSHOT.jar В предыдущем примере замените acloudyspringtime на любое значение, которое вы указываете в качестве имени вашего приложения. Если в этом же каталоге присутствует файл manifest.yml Clo...

Spring Boot: развертывание в облаке

Изображение
Исполняемые файлы Spring Boot готовы для большинства популярных поставщиков облачных услуг PaaS (Platform-as-a-Service). Эти провайдеры, как правило, требуют, чтобы вы "принесли свой собственный контейнер". Они управляют процессами приложения (а не приложениями Java), поэтому им необходим промежуточный уровень, который адаптирует ваше приложение к понятию запущенного процесса в облаке. Два популярных облачных провайдера, Heroku и Cloud Foundry, используют подход "buildpack" (сборочный пакет). buildpack оборачивает развернутый код во все, что необходимо для запуска приложения. Это может быть JDK и вызов java, встроенный веб-сервер или полноценный сервер приложений. Сборочный пакет является подключаемым, но в идеале вы должны иметь возможность использовать как можно меньше настроек. Это уменьшает влияние функциональности, которая не находится под вашим контролем. Это сводит к минимуму расхождения между средой разработки и производственной средой. В идеале ваше прило...

Развертывание приложений Spring Boot в контейнерах

Изображение
Гибкие варианты упаковки Spring Boot предоставляют большой выбор при развертывании вашего приложения. Вы можете развертывать приложения Spring Boot на различных облачных платформах, в контейнерах (например, Docker) или на виртуальных/реальных машинах. Развертывание Если вы запускаете свое приложение из контейнера, вы можете использовать исполняемый файл jar, но также часто бывает полезно разбить его и запустить по-другому. Некоторые реализации PaaS могут также распаковать архивы до их запуска. Например, Cloud Foundry работает таким образом. Самый простой способ запустить распакованный архив - запустить соответствующий модуль запуска следующим образом: $ jar -xf myapp.jar $ java org.springframework.boot.loader.JarLauncher Это на самом деле немного быстрее при запуске (в зависимости от размера jar), чем при запуске из неразвернутого архива. Во время выполнения вы не должны ожидать каких-либо различий. После распаковки jar-файла вы также можете увеличить время запуска, запустив ...

Spring Boot: Kotlin API, расширения, тестирование

Изображение
Kotlin API: runApplication Spring Boot предоставляет идиоматический способ запуска приложения с помощью runApplication<MyApplication>(*args), как показано в следующем примере: import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication class MyApplication fun main(args: Array<String>) { runApplication<MyApplication>(*args) } Это замена для SpringApplication.run(MyApplication::class.java, *args). Это также позволяет настраивать приложение, как показано в следующем примере: runApplication<MyApplication>(*args) { setBannerMode(OFF) } Kotlin API: расширения Расширения Kotlin предоставляют возможность расширять существующие классы дополнительными функциями. Spring Boot Kotlin API использует эти расширения для добавления новых специфичных для Kotlin удобств в существующие API. Предусмотрены расширения TestRestTemplate, аналогичные тем, которые предоставляются Sprin...

Spring Boot: поддержка Kotlin, требования, null безопасность

Изображение
Kotlin - это статически типизированный язык, предназначенный для JVM (и других платформ), который позволяет писать лаконичный и элегантный код, обеспечивая при этом совместимость с существующими библиотеками, написанными на Java. Spring Boot обеспечивает поддержку Kotlin, используя поддержку других проектов Spring, таких как Spring Framework, Spring Data и Reactor. Требования Spring Boot поддерживает Kotlin 1.3.x. Чтобы использовать Kotlin, в пути к классам должны присутствовать org.jetbrains.kotlin:kotlin-stdlib и org.jetbrains.kotlin:kotlin-reflect. Варианты kotlin-stdlib kotlin-stdlib-jdk7 и kotlin-stdlib-jdk8 также могут быть использованы. Так как классы Kotlin по умолчанию являются окончательными, вы, вероятно, захотите настроить плагин kotlin-spring, чтобы автоматически открывать классы, аннотированные Spring, чтобы их можно было проксировать. Модуль Jackson Kotlin необходим для сериализации/десериализации данных JSON в Kotlin. Он автоматически регистрируется при обнаружении...

Spring Boot: создание собственной автоконфигурации, создание собственного стартера

Изображение
Полная версия Spring Boot для библиотеки может содержать следующие компоненты: Модуль autoconfigure, который содержит код автоконфигурации. Модуль starter, который обеспечивает зависимость для модуля автоматической настройки, а также библиотеки и любые дополнительные зависимости, которые обычно полезны. Короче говоря, добавление стартера должно обеспечить все необходимое для начала использования этой библиотеки. Вы можете объединить код автоконфигурации и управление зависимостями в одном модуле, если вам не нужно разделять эти две проблемы. Именование Вы должны убедиться, что предоставили правильное пространство имен для своего стартера. Не начинайте имена модулей со spring-boot, даже если вы используете другой Maven groupId. В будущем возможна официальная поддержка для вещи, которую вы автоматически настраиваете. Как правило, вы должны назвать комбинированный модуль как стартер. Например, предположим, что вы создаете стартер для "acme" назовите модуль автоконфигураци...

Spring Boot: создание собственной автоконфигурации, тестирование собственной автоконфигурации

Изображение
На автоконфигурацию могут влиять многие факторы: конфигурация пользователя (определение @Bean и настройка Environment), оценка состояния (наличие определенной библиотеки) и другие. Конкретно, каждый тест должен создавать четко определенный ApplicationContext, представляющий комбинацию этих настроек. ApplicationContextRunner предоставляет отличный способ достичь этого. ApplicationContextRunner обычно определяется как поле тестового класса для сбора базовой, общей конфигурации. В следующем примере показано, что UserServiceAutoConfiguration всегда вызывается: private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(UserServiceAutoConfiguration.class)); Если необходимо определить несколько автоконфигураций, нет необходимости упорядочивать их объявления, так как они вызываются в том же порядке, что и при запуске приложения. Каждый тест может использовать runner для представления конкретного варианта испол...

Spring Boot: создание собственной автоконфигурации, аннотации условий

Изображение
Вы почти всегда захотите включить одну или несколько аннотаций @Conditional в свой класс автоконфигурации. Аннотация @ConditionalOnMissingBean - это один из распространенных примеров, который позволяет разработчикам переопределять автоконфигурацию, если они недовольны вашими настройками по умолчанию. Spring Boot включает в себя ряд аннотаций @Conditional, которые вы можете повторно использовать в своем собственном коде, аннотируя классы @Configuration или отдельные методы @Bean. Эти аннотации включают в себя: Class Conditions (Условия класса) Bean Conditions (Условия компонента) Property Conditions (Условия свойства) Resource Conditions (Условия ресурса) Web Application Conditions (Условия веб-приложения) SpEL Expression Conditions (Условия выражения SpEL) Условия класса Аннотации @ConditionalOnClass и @ConditionalOnMissingClass позволяют включать классы @Configuration в зависимости от наличия или отсутствия определенных классов. Из-за того, что метаданные аннотации анализир...

Spring Boot: создание собственной автоконфигурации

Изображение
Если вы работаете в компании, которая разрабатывает общие библиотеки, или если вы работаете с открытой или коммерческой библиотекой, вы можете разработать собственную автоконфигурацию. Классы автоконфигурации могут быть объединены во внешние jar-файлы и по-прежнему поддерживаться Spring Boot. Автоконфигурирование может быть связано со стартером, который предоставляет код автоконфигурации, а также типичные библиотеки, которые вы будете использовать с ним. Понимание автоматически настроенных компонентов Под капотом автоконфигурация реализована с помощью стандартных классов @Configuration. Дополнительные аннотации @Conditional используются для ограничения необходимости применения автоконфигурации. Обычно классы автоконфигурации используют аннотации @ConditionalOnClass и @ConditionalOnMissingBean. Это гарантирует, что автоконфигурация применяется только тогда, когда соответствующие классы найдены и когда вы не объявили свою собственную @Configuration. Поиск автоконфигурации кандидатов ...

Spring Boot: Web Services (веб службы)

Изображение
Spring Boot обеспечивает автоматическую настройку Web Services, поэтому все, что вам нужно сделать, это определить Endpoints. Доступ к функциям Spring Web Services можно легко получить с помощью модуля spring-boot-starter-webservices. Бины SimpleWsdl11Definition и SimpleXsdSchema могут быть автоматически созданы для ваших WSDL и XSD соответственно. Для этого настройте их расположение, как показано в следующем примере: spring.webservices.wsdl-locations=classpath:/wsdl Вызов Web Services с помощью WebServiceTemplate Если вам нужно вызывать удаленные Web Services из вашего приложения, вы можете использовать класс WebServiceTemplate. Поскольку экземпляры WebServiceTemplate часто необходимо настраивать перед использованием, Spring Boot не предоставляет ни одного автоматически настраиваемого компонента WebServiceTemplate. Однако он автоматически настраивает WebServiceTemplateBuilder, который можно использовать для создания экземпляров WebServiceTemplate при необходимости. Следующи...

Spring Boot: WebSockets

Изображение
Spring Boot обеспечивает автоматическую настройку WebSockets для встроенных систем Tomcat, Jetty и Undertow. Если вы развертываете файл war в автономном контейнере, Spring Boot предполагает, что контейнер отвечает за настройку его поддержки WebSocket. Spring Framework предоставляет расширенную поддержку WebSocket для веб-приложений MVC, к которой легко получить доступ через модуль spring-boot-starter-websocket. Поддержка WebSocket также доступна для реактивных веб-приложений и требует включения API WebSocket наряду с spring-boot-starter-webflux: <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> </dependency> Читайте также: Spring Boot: планировщик Quartz Spring Boot: поддерживаемые поставщики кэша Spring Boot: поставщики кэша, Generic, JCache, Infinispan

Spring Boot: утилиты тестов

Изображение
Несколько классов утилит тестов, которые обычно полезны при тестировании вашего приложения, упакованы как часть spring-boot. ConfigFileApplicationContextInitializer ConfigFileApplicationContextInitializer - это ApplicationContextInitializer, который можно применять к тестам для загрузки файлов Spring Boot application.properties. Вы можете использовать его, когда вам не нужен полный набор функций, предоставляемых @SpringBootTest, как показано в следующем примере: @ContextConfiguration(classes = Config.class, initializers = ConfigFileApplicationContextInitializer.class) Использование только ConfigFileApplicationContextInitializer не обеспечивает поддержку внедрения @Value("${…}"). Его единственная задача - обеспечить загрузку файлов application.properties в Spring Environment. Для поддержки @Value вам нужно либо дополнительно настроить PropertySourcesPlaceholderConfigurer, либо использовать @SpringBootTest, который автоматически настраивает его для вас. TestProper...

Spring Boot: тестирование, автоконфигурация и нарезка

Изображение
Дополнительная автоконфигурация и нарезка Каждый срез содержит одну или несколько аннотаций @AutoConfigure…, которые, в частности, определяют автоконфигурации, которые должны быть включены как часть среза. Дополнительные автоконфигурации можно добавить, создав пользовательскую аннотацию @AutoConfigure… или просто добавив @ImportAutoConfiguration в тест, как показано в следующем примере: @JdbcTest @ImportAutoConfiguration(IntegrationAutoConfiguration.class) class ExampleJdbcTests { } Убедитесь, что вы не используете обычную аннотацию @Import для импорта автоконфигураций, так как они обрабатываются Spring Boot определенным образом. Конфигурация пользователя и нарезка Если вы структурируете свой код разумным образом, ваш класс @SpringBootApplication по умолчанию используется в качестве конфигурации ваших тестов. Тогда становится важным не засорять основной класс приложения настройками конфигурации, специфичными для конкретной области его функциональных возможностей. Предполож...

Spring Boot: автоматически настроенные Spring REST Docs тесты

Изображение
Вы можете использовать аннотацию @AutoConfigureRestDocs, чтобы использовать Spring REST Docs в своих тестах с Mock MVC, REST Assured или WebTestClient. Это устраняет необходимость расширения JUnit в Spring REST Docs. @AutoConfigureRestDocs можно использовать для переопределения выходного каталога по умолчанию (target/generated-snippets, если вы используете Maven, или build/generated-snippets, если вы используете Gradle). Его также можно использовать для настройки хоста, схемы и порта, которые появляются в любых задокументированных URI. Автоматически настроенные Spring REST Docs тесты с Mock MVC @AutoConfigureRestDocs настраивает bean-компонент MockMvc для использования Spring REST Docs. Вы можете внедрить его с помощью @Autowired и использовать его в своих тестах, как обычно, когда используете Mock MVC и Spring REST Docs, как показано в следующем примере: import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework...