Spring 将应用程序作为服务启动 + VM 选项

Spring boot application as a service + VM Options

我有一个 Spring 引导应用程序,它是使用 Linux 的 systemd 作为服务启动的。

它基于此文档: http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html

使用默认脚本,jar文件启动。它工作正常。

/etc/systemd/system/myapp.服务:

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
ExecStart=/var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

现在我想在 jar 启动时添加 VM 选项。 我尝试将 .conf 文件添加到项目中,但它不起作用。

/var/myapp/myapp.conf :

JAVA_OPTS=-Xms256M -Xmx512M

如何添加 JVM 选项以使用 systemd 启动应用程序?

根据 documentation,您可以简单地添加一个环境变量 JAVA_OPTS 如果这对您来说足够了。

对于您的项目,我们使用自定义 ENV 变量和 systemd 启动应用程序的方式如下所示:

[Unit]
Description=myapp
After=syslog.target

[Service]
User=myapp
ExecStart=source /var/myapp/myapp.conf; java -jar /var/myapp/myapp.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

基本上直接获取 ENV 配置会将 ENV 变量暴露给应用程序

我终于在这里找到了解决方案: how to configure heap size when start a spring-boot application with embedded tomcat?

我的 .conf 文件的内容有误。 我也需要写这个:

export JAVA_OPTS="-Xms256m -Xmx512m"

现在当我 运行 "service myapp start" 时,它从良好的堆大小开始。

另一个好方法是在与 myapp.jar 文件

相同的目录中创建一个配置文件 myapp.conf
/var/myapp/

并输入以下内容:

JAVA_OPTS="-Xms256m -Xmx512m"

然后重新启动应用程序。

注意配置文件的名称除了扩展名外要与jar文件相同,.conf而不是.jar.war

这种方式还有其他一些优点:

  • 仅为 myapp 应用程序单独保留设置。
  • 我们也可以在文件中添加其他参数。

可以找到更多详细信息 here