Spring boot является платформой для разработки приложений и микросервисов на основе Spring, а логическим концом разработки приложения (как это видит разработчик), является его поставка. В обычном приложении приходится настраивать maven для сборки jar/war/ear файла и вручную контролировать сборку. Spring boot облегчает и автоматизирует этот процесс.
Сборка приложений
Если вы сгенерировали приложение с использованием Sping Initializr, то в вашем pom файле автоматически будет добавлена зависимость от родительского Spring boot starter и Spring boot starter plugin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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> [...] <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.M5</version> <relativePath/> <!-- lookup parent from repository --> </parent> [...] <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
Этого вполне достаточно для сборки jar файла, включающего в себя ваш проект и всего его зависимости автоматически, командой mvn package. Готовый jar можно запускать как обычно: java -jar filename.jar
Исполняемые файлы
Разумеется, ради одной лишь автоматической сборки приложения командой mvn package я бы не стал писать целую статью. Spring boot имеет ещё одну полезную фичу — сборка исполняемых jar файлов. Исполняемый jar файл представляет собой обычный jar файл, с добавленным к нему скриптом запуска, который исполняет уже само java приложение. Это позволяет использовать jar как обычный исполняемый файл. Включается эта возможность опцией <executable/>
1 2 3 4 5 6 7 | <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin> |
К сожалению, исполнять такой файл возможно лишь на linux системах.
Хорошая новость в том, что исполняемый jar файл является так же и init скриптом, что позволяет сразу же использовать ваш файл как сервис. При этом сервис будет запущен от имени пользователя, которому принадлежит исполняемый файл, pid файл будет автоматически создаваться и удаляться в /var/run/<appname>/<appname>.pid и лог (включая выводимое на консоль) будет записан в /var/log<appname>.log
К сожалению, systemd unit файл не предоставляется в комплекте с вашим ja rфайлом, но можно использовать следующую заготовку:
1 2 3 4 5 6 7 8 9 10 11 | [Unit] Description=myapp After=syslog.target [Service] User=myapp ExecStart=/opt/app/app.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target |