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
|