Приложение за пролетно зареждане като услуга

1. Общ преглед

Тази статия разглежда някои опции за стартиране на приложенията Spring Boot като услуга.

Първо, ще обясним опциите за опаковане на уеб приложения и системните услуги. В следващите раздели ще разгледаме различни алтернативи, които имаме при настройването на услуга и за Linux като Windows базирани системи.

Накрая ще завършим с някои препратки към допълнителни източници на информация.

2. Инструкции за настройка и изграждане на проекти

2.1. Опаковка

Уеб приложенията традиционно се пакетират като Web Application aRchives (WAR) и се разполагат на уеб сървър.

Приложенията на Spring Boot могат да бъдат пакетирани едновременно като WAR и JAR файлове. Последният вгражда уеб сървър в JAR файл, който ви позволява да стартирате приложения, без да е необходима инсталация и конфигурация на сървър на приложения.

2.2. Maven конфигурация

Нека започнем с дефиниране на конфигурацията на нашия файл pom.xml :

jar  org.springframework.boot spring-boot-starter-parent 1.4.0.RELEASE   ....     org.springframework.boot spring-boot-maven-plugin  true    

Опаковката трябва да бъде настроена на буркан . Ние използваме най-новата стабилна версия на Spring Boot по време на писането, но всяка версия след 1.3 ще бъде достатъчна. Повече информация за наличните версии можете да намерите тук.

Забележете, че сме задали параметър на true за артефакта spring-boot-maven-plugin . Това гарантира, че към пакета JAR се добавя файл MANIFEST.MF . Този манифест съдържа запис от основен клас, който определя кой клас дефинира основния метод за вашето приложение.

2.3. Изграждане на вашето приложение

Изпълнете следната команда в основната директория на приложението:

$ mvn clean package

Изпълнимият JAR файл вече е достъпен в целевата директория и ние можем да стартираме приложението, като изпълним следната команда в командния ред:

$ java -jar your-app.jar

На този етап все още трябва да извикате интерпретатора на Java с опцията -jar . Има много причини, поради които би било за предпочитане да стартирате приложението си, като можете да го извикате като услуга.

3. На Linux

За да стартираме програма като фонов процес, можем просто да използваме командата nohup Unix, но това също не е предпочитаният начин по различни причини. В тази тема е дадено добро обяснение.

Вместо това ще демонизираме нашия процес. Под Linux можем да изберем да конфигурираме демон или с традиционния скрипт за инициализиране на System V, или с конфигурационен файл на Systemd . Първият е традиционно най-известният вариант, но постепенно се заменя с втория.

Можете да намерите повече подробности за тази разлика тук.

За по-голяма сигурност първо създаваме конкретен потребител, с който да стартираме услугата и съответно променяме разрешенията на изпълнимия JAR файл:

$ sudo useradd baeldung $ sudo passwd baeldung $ sudo chown baeldung:baeldung your-app.jar $ sudo chmod 500 your-app.jar

3.1. System V Init

Изпълнимият JAR файл на Spring Boot прави процеса на настройка на услугата много лесен:

$ sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

Горната команда създава символична връзка към вашия изпълним JAR файл. Трябва да използвате пълния път до вашия изпълним JAR файл, в противен случай символичната връзка няма да работи правилно. Тази връзка ви позволява да стартирате приложението като услуга:

$ sudo service your-app start

Скриптът поддържа стандартните команди за стартиране , спиране , рестартиране и състояние . Освен това:

  • той стартира услугите, изпълнявани под току-що създадената от нас потребителска помощ
  • той проследява идентификатора на процеса на приложението в /var/run/your-app/your-app.pid
  • той записва конзолни дневници в /var/log/your-app.log , които може да искате да проверите, в случай че приложението ви не стартира правилно

3.2. Systemd

Настройката на услугата systemd също е много проста. Първо, ние създаваме скрипт на име your-app.service, използвайки следния пример и го поставяме в / etc / systemd / system директория:

[Unit] Description=A Spring Boot application After=syslog.target [Service] User=baeldung ExecStart=/path/to/your-app.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target

Не забравяйте да промените полетата Описание , Потребител и ExecStart, за да съответстват на вашето приложение. На този етап също би трябвало да можете да изпълнявате гореспоменатите стандартни команди за обслужване.

За разлика от подхода за инициализиране на System V , описан в предишния раздел, файлът с идентификатор на процеса и регистрационният файл на конзолата трябва да бъдат конфигурирани изрично, като се използват подходящи полета в скрипта на услугата. Изчерпателен списък с опции можете да намерите тук.

3.3. Upstart

Upstart е базиран на събития мениджър на услуги, потенциален заместител на системата V, който предлага повече контрол върху поведението на различните демони.

Сайтът има добри инструкции за настройка, които трябва да работят за почти всяка дистрибуция на Linux. Когато използвате Ubuntu, вероятно вече сте го инсталирали и конфигурирали (проверете дали има задачи с име, започващо с “upstart” в / etc / init ).

Създаваме работа your-app.conf, за да стартираме нашето приложение Spring Spring:

# Place in /home/{user}/.config/upstart description "Some Spring Boot application" respawn # attempt service restart if stops abruptly exec java -jar /path/to/your-app.jar 

Now run “start your-app” and your service will start.

Upstart offers many job configuration options, you can find most of them here.

4. On Windows

In this section, we present a couple of options that may be used to run a Java JAR as a Windows service.

4.1. Windows Service Wrapper

Due to difficulties with the GPL license of the Java Service Wrapper (see next subsection) in combination with e.g. the MIT license of Jenkins, the Windows Service Wrapper project, also known as winsw, was conceived.

Winsw provides programmatic means to install/uninstall/start/stop a service. In addition, it may be used to run any kind of executable as a service under Windows, whereas Java Service Wrapper, as implied by its name, only supports Java applications.

First, you download the binaries here. Next, the configuration file that defines our Windows service, MyApp.xml, should look like this:

 MyApp MyApp This runs Spring Boot as a Service.  java -Xmx256m -jar "%BASE%\MyApp.jar" rotate  

Finally, you have to rename the winsw.exe to MyApp.exe so that its name matches with the MyApp.xml configuration file. Thereafter you can install the service like so:

$ MyApp.exe install

Similarly, you may use uninstall, start, stop, etc.

4.2. Java Service Wrapper

In case you don't mind the GPL licensing of the Java Service Wrapper project, this alternative may address your needs to configure your JAR file as a Windows service equally well. Basically, the Java Service Wrapper also requires you to specify in a configuration file which specifies how to run your process as a service under Windows.

This article explains in a very detailed way how to set up such an execution of a JAR file as a service under Windows, so we there's no need to repeat the info.

5. Additional References

Spring Boot applications may also be started as Windows service using Procrun of the Apache Commons Daemon project. Procrun is a set of applications that allow Windows users to wrap Java applications as Windows services. Such a service may be set to start automatically when the machine boots and will continue to run without any user being logged on.

More details on starting Spring Boot applications under Unix may be found here. There are also detailed instructions on how to modify Systemd unit files for Redhat based systems. Finally

Finally, this quick howto describes how to incorporate a Bash script into your JAR file, so that it becomes an executable itself!

6. Conclusion

Services allow you to manage your application state very efficiently and, as we have seen, service setup for Spring Boot applications is now easier than ever.

Само не забравяйте да следвате важните и прости мерки за сигурност на потребителските разрешения за стартиране на вашата услуга.