From a1345e17f1dc70b6610a1060dc1b758248c5eec9 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 15 Jul 2016 15:32:13 -0700 Subject: [PATCH] Improve "fully executable jars" documentation Closes gh-5505 --- .../src/main/asciidoc/deployment.adoc | 145 +++++++++++------- 1 file changed, 91 insertions(+), 54 deletions(-) diff --git a/spring-boot-docs/src/main/asciidoc/deployment.adoc b/spring-boot-docs/src/main/asciidoc/deployment.adoc index ba3b0a14af..044dec51fe 100644 --- a/spring-boot-docs/src/main/asciidoc/deployment.adoc +++ b/spring-boot-docs/src/main/asciidoc/deployment.adoc @@ -394,6 +394,9 @@ With Gradle, the equivalent configuration would be: } ---- +You can then run your application by typing `./my-application.jar` (where +`my-application` is the name of your artifact). + NOTE: Fully executable jars work by embedding an extra script at the front of the file. Not all tools currently accept this format so you may not always be able to use this technique. @@ -415,9 +418,13 @@ or `systemd`. [[deployment-initd-service]] ==== Installation as an init.d service (System V) -The default executable script that can be embedded into Spring Boot jars will act as an -`init.d` script when it is symlinked to `/etc/init.d`. The standard `start`, `stop`, -`restart` and `status` commands can be used. The script supports the following features: +If you've configured Spring Boot's Maven or Gradle plugin to generate a +<>, and you're not using a custom +`embeddedLaunchScript`, then your application can be used as an `init.d` service. Simply +symlink the jar to `init.d` to support the standard `start`, `stop`, `restart` and +`status` commands. + +The script supports the following features: * Starts the services as the user that owns the jar file * Tracks application's PID using `/var/run//.pid` @@ -431,15 +438,26 @@ Spring Boot application as an `init.d` service simply create a symlink: $ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp ---- -Once installed, you can start and stop the service in the usual way. You can also flag the -application to start automatically using your standard operating system tools. For example, -if you use Debian: +Once installed, you can start and stop the service in the usual way. For example: + +[indent=0,subs="verbatim,quotes,attributes"] +---- + $ /etc/init.d/myapp start +---- + +TIP: If you're application fails to start, check the log file written to +`/var/log/.log` for errors. + +You can also flag the application to start automatically using your standard operating +system tools. For example, if you use Debian: [indent=0,subs="verbatim,quotes,attributes"] ---- $ update-rc.d myapp defaults ---- + + [[deployment-initd-service-securing]] ===== Securing an init.d service @@ -548,8 +566,67 @@ Refer to `man systemctl` for more details. [[deployment-script-customization]] ==== Customizing the startup script -The script accepts the following parameters as environment variables, so you can change -the default behavior in a script or on the command line: +The default embedded startup script written by the Maven or Gradle plugin can be +customized in a number of ways. For most people, using the default script along with +a few customizations is usually enough. If you find you can't customize something that +you need to, you can always use the `embeddedLaunchScript` option to write your own +file entirely. + + + +[[deployment-script-customization-when-it-written]] +===== Customizing script when it's written +It often makes sense to customize elements of the start script as it's written into the +jar file. For example, init.d scripts can provide a "`description`" and, since you know +this up front (and it won't change), you may as well provide it when the jar is generated. + +To customize written elements, use the `embeddedLaunchScriptProperties` option of the +Spring Boot Maven or Gradle plugins. + +The following property substitutions are supported with the default script: + +[cols="1,6"] +|=== +|Name |Description + +|`mode` +|The script mode. Defaults to `auto`. + +|`initInfoProvides` +|The `Provides` section of "`INIT INFO`". Defaults to `spring-boot-application` for Gradle + and to `${project.artifactId}` for Maven. + +|`initInfoShortDescription` +|The `Short-Description` section of "`INIT INFO`". Defaults to `Spring Boot Application` +for Gradle and to `${project.name}` for Maven. + +|`initInfoDescription` +|The `Description` section of "`INIT INFO`". Defaults to `Spring Boot Application` for + Gradle and to `${project.description}` (falling back to `${project.name}`) for Maven. + +|`initInfoChkconfig` +|The `chkconfig` section of "`INIT INFO`". Defaults to `2345 99 01`. + +|`logFolder` +|The default value for `LOG_FOLDER`. Only valid for an `init.d` service. + +|`pidFolder` +|The default value for `PID_FOLDER`. Only valid for an `init.d` service. + +|`useStartStopDaemon` +|If the `start-stop-daemon` command, when it's available, should be used to control the + process. Defaults to `true`. +|=== + + +[[deployment-script-customization-when-it-runs]] +[[deployment-script-customization-conf-file]] +===== Customizing script when it runs +For items of the script that need to be customized _after_ the jar has been written you +can use environment variables or a +<>. + +The following environment properties are supported with the default script: [cols="1,6"] |=== @@ -608,66 +685,26 @@ script. Check the http://www.freedesktop.org/software/systemd/man/systemd.service.html[service unit configuration man page] for more details. -In addition, the following properties can be changed when the script is written by using -the `embeddedLaunchScriptProperties` option of the Spring Boot Maven or Gradle plugins. - -[cols="1,6"] -|=== -|Name |Description - -|`mode` -|The script mode. Defaults to `auto`. - -|`initInfoProvides` -|The `Provides` section of "`INIT INFO`". Defaults to `spring-boot-application` for Gradle - and to `${project.artifactId}` for Maven. - -|`initInfoShortDescription` -|The `Short-Description` section of "`INIT INFO`". Defaults to `Spring Boot Application` -for Gradle and to `${project.name}` for Maven. - -|`initInfoDescription` -|The `Description` section of "`INIT INFO`". Defaults to `Spring Boot Application` for - Gradle and to `${project.description}` (falling back to `${project.name}`) for Maven. - -|`initInfoChkconfig` -|The `chkconfig` section of "`INIT INFO`". Defaults to `2345 99 01`. - -|`logFolder` -|The default value for `LOG_FOLDER`. Only valid for an `init.d` service. - -|`pidFolder` -|The default value for `PID_FOLDER`. Only valid for an `init.d` service. - -|`useStartStopDaemon` -|If the `start-stop-daemon` command, when it's available, should be used to control the - process. Defaults to `true`. -|=== - - - [[deployment-script-customization-conf-file]] -==== Customizing the startup script with a conf file - With the exception of `JARFILE` and `APP_NAME`, the above settings can be configured using -a `.conf` file, +a `.conf` file. The file is expected next to the jar file and have the same name but +suffixed with `.conf` rather than `.jar`. For example, a jar named `/var/myapp/myapp.jar` +will use the configuration file named `/var/myapp/myapp.conf`. +.myapp.conf [indent=0,subs="verbatim,quotes,attributes"] ---- JAVA_OPTS=-Xmx1024M LOG_FOLDER=/custom/log/folder ---- -The file is expected next to the jar file and have the same name but suffixed with -`.conf` rather than `.jar`. For example, a jar named `/var/myapp/myapp.jar` will use the -configuration file named `/var/myapp/myapp.conf` if it exists. You can also use the -`CONF_FOLDER` property to customize the location of that file. +TIP: You can use a `CONF_FOLDER` environment variable to customize the location of the +config file if you don't like it living next to the jar. To learn about securing this file appropriately, please refer to <>. - [[deployment-windows]] == Microsoft Windows services Spring Boot application can be started as Windows service using