企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
###56.1.3 自定义启动脚本 Maven或Gradle插件生成的默认内嵌启动脚本可以通过很多方法自定义,对于大多数开发者,使用默认脚本和一些自定义通常就足够了。如果发现不能自定义需要的东西,你可以使用`embeddedLaunchScript`选项生成自己的文件。 **在脚本生成时自定义** 自定义写入jar文件的启动脚本元素是有意义的,例如,为`init.d`脚本提供`description`,既然知道这会展示到前端,你可能会在生成jar时提供它。 为了自定义写入的元素,你需要为Spring Boot Maven或Gradle插件指定`embeddedLaunchScriptProperties`选项。 以下是默认脚本支持的可代替属性: |名称|描述| |:----|:----| |`mode`|脚本模式,默认为`auto`| |`initInfoProvides`|'INIT INFO'部分的`Provides`,对于Gradle默认为`spring-boot-application`,对于Maven默认为`${project.artifactId}`| |`initInfoShortDescription`|‘INIT INFO’部分的`Short-Description`,对于Gradle默认为`Spring Boot Application`,对于Maven默认为`${project.name}`| |`initInfoDescription`|“INIT INFO”部分的`Description`,对于Gradle默认为`Spring Boot Application`,对于Maven默认为`${project.description}`(失败会回退到`${project.name}`)| |`initInfoChkconfig`|“INIT INFO”部分的`chkconfig`,默认为`2345 99 01`| |`confFolder`|`CONF_FOLDER`的默认值,默认为包含jar的文件夹| |`logFolder`|`LOG_FOLDER`的默认值,只对`init.d`服务有效| |`pidFolder`|`PID_FOLDER`的默认值,只对`init.d`服务有效| |`useStartStopDaemon`|如果`start-stop-daemon`命令可用,它会控制该实例,默认为`true`| **在脚本运行时自定义** 对于需要在jar文件生成后自定义的项目,你可以使用环境变量或配置文件。 默认脚本支持以下环境变量: |变量|描述| |:----|:----| |`MODE`|操作的模式,默认值依赖于jar构建方式,通常为`auto`(意味着它会尝试通过检查它是否为`init.d`目录的软连接来推断这是不是一个init脚本)。你可以显式将它设置为`service`,这样`stop|start|status|restart`命令就可以工作了,或如果你只是想在前台运行该脚本那只需`run`| |`USE_START_STOP_DAEMON`|如果`start-stop-daemon`命令可用,它将被用来控制该实例,默认为`true`| |`PID_FOLDER`|pid文件夹的根目录(默认为`/var/run`)| |`LOG_FOLDER`|存放日志文件的文件夹(默认为`/var/log`)| |`CONF_FOLDER`|读取`.conf`文件的文件夹| |`LOG_FILENAME`|存放于`LOG_FOLDER`的日志文件名(默认为`<appname>.log`)| |`APP_NAME`|应用名,如果jar运行自一个软连接,脚本会猜测它的应用名。如果不是软连接,或你想显式设置应用名,这就很有用了| |`RUN_ARGS`|传递给程序的参数(Spring Boot应用)| |`JAVA_HOME`|默认使用`PATH`指定`java`的位置,但如果在`$JAVA_HOME/bin/java`有可执行文件,你可以通过该属性显式设置| |`JAVA_OPTS`|JVM启动时传递的配置项| |`JARFILE`|在脚本启动没内嵌其内的jar文件时显式设置jar位置| |`DEBUG`|如果shell实例的`-x`标识有设值,则你能轻松看到脚本的处理逻辑| **注** `PID_FOLDER`,`LOG_FOLDER`和`LOG_FILENAME`变量只对`init.d`服务有效。对于`systemd`等价的自定义方式是使用‘service’脚本。 如果`JARFILE`和`APP_NAME`出现异常,上面的设置可以使用一个`.conf`文件进行配置。该文件预期是放到跟jar文件临近的地方,并且名字相同,但后缀为`.conf`而不是`.jar`。例如,一个命名为`/var/myapp/myapp.jar`的jar将使用名为`/var/myapp/myapp.conf`的配置文件: **myapp.conf** ```properties JAVA_OPTS=-Xmx1024M LOG_FOLDER=/custom/log/folder ``` **注** 如果不喜欢配置文件放到jar附近,你可以使用`CONF_FOLDER`环境变量指定文件的位置。 想要学习如何正确的保护文件可以参考[the guidelines for securing an init.d service.](the guidelines for securing an init.d service)。