日期:2025/04/01 06:27来源:未知 人气:52
springboot在linux上的多种启动方式概览 接下来,我们将深入探讨springboot在linux上的多种启动方式。
在服务器上,首先需要确认Java运行环境已经安装。随后,进入SpringBoot应用程序的目录,并使用java -jar
命令来启动应用程序:
java -jar demo.jar
这种方式启动的jar包仅在当前窗口中运行,一旦窗口被关闭或连接被断开,进程将随之终止。
若希望以不挂断的方式在后台启动应用程序,可以使用nohup
命令结合java -jar
进行操作:
nohup java -jar demo.jar > /dev/null
这样,即使关闭窗口或断开连接,应用程序也将继续在后台运行。 2>start.log &
另一种启动SpringBoot应用程序的方式是编写一个简单的shell脚本。首先,在应用程序目录下创建一个名为start.sh的文件,并添加以下内容:
然后,使用以下命令授予脚本执行权限:
chmod x start.sh
在应用程序目录下运行shell脚本即可启动java服务:
sh ./start.sh
当然,你也可以根据需要,编写更完整的shell脚本来实现对java服务的更精细控制,包括启动、关闭、重启以及状态检查等功能。
SpringBoot项目能够被打包成完全可执行的jar文件,这得益于spring-boot-maven-plugin插件的支持。在项目的pom.xml文件中,添加如下配置:
完成配置后,执行打包命令,生成的jar文件将具备可执行性。只需在应用程序目录下运行./xxx.jar
即可启动服务。尽管这种方式启动服务较为便捷,但关停和重启服务可能不那么直观,需要借助其他系统命令进行辅助。为了进一步提升服务的可管理性,我们可以进一步改造打包配置,将项目打包成服务模式。具体来说,就是在spring-boot-maven-plugin的配置中加入layout
元素,并设置为ZIP
布局。这样,生成的jar文件将包含更多的服务管理功能,使得启动、关停和重启服务变得更加容易和直观。
在spring-boot-maven-plugin的配置中,我们加入了executable
元素并设置为true
,以使生成的jar文件具备可执行性。此外,还配置了embeddedLaunchScriptProperties
,其中mode
设置为service
,以启用服务模式。同时,通过logFolder
和pidFolder
属性指定了日志和pid文件的存储位置,避免了默认访问受限制的目录。这样打包后,上传到服务器即可执行start
、stop
、restart
等命令来启动、关停和重启服务。
在修改了运行账户可访问的日志和pid目录之后,服务的启动、停止和重启操作均表现正常。
四、利用Supervisor进行启动管理
Supervisor,作为一款强大的进程管理工具,能够有效地监控并管理后台运行的应用进程。借助Supervisor,我们可以轻松地启动并管理SpringBoot应用程序,确保其稳定运行。
安装并配置Supervisor 首先,进行安装初始化。在命令行中输入以下指令来安装Supervisor:
pip3 install supervisor
接着,创建配置路径。使用mkdir
命令来创建/etc/supervisor/
目录:
mkdir -p /etc/supervisor/
然后,生成配置文件。运行以下命令将配置信息输出到/etc/supervisor/supervisord.conf
文件中:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
最后,修改主配置文件。在文件的末尾添加以下配置并保存:
files=/etc/supervisor/conf.d/*.conf2. 配置服务启动在Supervisor中,我们需要为每个服务创建一个配置文件,以定义如何启动和监控该服务。假设我们要添加一个Java服务,其配置可能如下所示:```ini[program:demo]command=java -Djava.security.egd=file:/dev/./urandom -Xms256m -Xmx1024m -XX:NewRatio= -jar /path/to/your/service.jar
在这个配置中,[program:demo]
定义了一个新的服务,名为“demo”。command
参数指定了启动服务的命令,这里我们使用Java来运行一个jar包。你需要根据实际情况替换-jar /path/to/your/service.jar
中的路径,指向你的实际服务文件。其他参数,如-Djava.security.egd
和内存设置,也可以根据你的需求进行调整。
完成配置后,Supervisor将会在启动时运行这个命令,并持续监控服务的状态。如果服务意外退出,Supervisor将会自动重启它。 4. XX:SurvivorRatio 在Java的垃圾回收参数中,XX:SurvivorRatio用于定义新生代中Eden区和Survivor区的大小比例。例如,如果你设置XX:SurvivorRatio=8,那么表示Eden区与单个Survivor区的大小比例为8:1。这个参数对于调整Java服务的内存使用和性能至关重要。
这个参数用于指定Java虚拟机使用的字符编码。在这里,我们设置为utf-8,这是一种通用的、支持国际字符的编码格式。确保你的Java服务能够正确处理各种字符,避免乱码问题。
这行命令指定了要运行的Java服务jar包的路径。你需要根据实际情况替换这个路径,指向你的实际服务文件。确保路径正确,且服务文件可执行。
这个参数告诉Supervisor,如果Java服务意外退出,应该自动重启它。这对于确保服务的持续运行非常有用。
这个参数决定Supervisor是否在启动时自动启动Java服务。在这里,我们设置为false,意味着服务不会在Supervisor启动时自动运行。你可以根据需要设置为true或false。
这个参数用于指定Supervisor在启动服务时重试的次数。如果服务因为某些原因启动失败,Supervisor将会根据这个参数的值进行重试。你可以根据实际情况设置一个合适的值,以确保服务能够成功启动。
这两行参数用于指定Java服务的标准错误输出和标准输出日志文件的路径。在这里,我们分别将它们设置为/mnt/applogs/demo/err.log和/mnt/applogs/demo/out.log。确保这些路径存在且可写,以便服务能够正常记录日志。 3. 启动服务 首先,切换到非root用户,然后启动supervisor服务。使用以下命令:
supervisord -c /etc/supervisor/supervisord.conf
接下来,通过supervisorctl命令启动springboot服务。执行以下指令:
supervisorctl start demo
执行完毕后,服务便已成功启动。
将Spring Boot应用程序打包成Docker镜像,然后可以在Linux上通过Docker容器来启动应用程序。首先,你需要安装并启动Docker服务。在终端中执行以下命令:
sudo yum update -ysudo amazon-linux-extras install dockersudo service docker startsudo systemctl enable docker
接下来,在Spring Boot应用程序的目录下创建一个Dockerfile文件,并添加必要的指令来构建镜像。Dockerfile的内容可能类似于以下示例:
FROM openjdk:8ARG PROFILESARG APP_NAME_ARGARG SERVER_PORT_ARGENV PROFILES_ACTIVE ${PROFILES}ENV APP_SERVER_PORT ${SERVER_PORT_ARG}ENV LANG=zh_CN.UTF-8RUN apt-get update && apt-get install -y locales && sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && locale-genVOLUME /tmpADD ${APP_NAME_ARG}.jar /app.jarRUN bash -c 'touch /app.jar'EXPOSE ${SERVER_PORT_ARG}ENTRYPOINT ["sh", "-c", "date && java -XX:+UseG1GC -Dfile.encoding=utf-8 -Dserver.port=${SERVER_PORT_ARG} ..."]
请注意,上述Dockerfile中的ENTRYPOINT指令需要根据实际情况进行修改,以适应你的Spring Boot应用程序的启动命令。完成Dockerfile的编写后,你可以使用docker build
命令来构建Docker镜像。然后,通过docker run
命令来启动容器,并运行你的Spring Boot应用程序。
接着,在Spring Boot应用程序的jar文件所在目录下,创建一个名为start.sh的启动脚本。在终端中,切换到该目录并执行以下命令来构建Docker镜像:
docker build --build-arg PROFILES=$1 --build-arg APP_NAME_ARG=$2 --build-arg SERVER_PORT_ARG=$3 -t $2 .
这里的$1
、$2
和$3
是环境变量,分别代表Spring Boot应用程序的配置文件、应用程序名称和服务器端口。构建完成后,你就可以通过Docker来启动并运行你的Spring Boot应用程序了。
构建完成后,你就可以通过Docker来启动并运行你的Spring Boot应用程序了。
在Spring Boot应用程序构建完毕后,接下来你可以利用Docker来启动并运行它。这一步骤将确保你的应用程序能够高效且稳定地在Docker容器中运行。
在Docker中启动并运行Spring Boot应用程序,你需要执行以下步骤:首先,使用docker stop
命令停止任何正在运行的容器;接着,使用docker rm
命令删除停止的容器;然后,通过docker rmi
命令移除所有未标记的镜像;最后,执行docker run
命令来启动新的容器。在运行命令时,你需要指定一些参数,如卷挂载路径、端口映射、重启策略等,以确保应用程序能够高效且稳定地运行。
在Docker中启动并运行Spring Boot应用程序的流程已经概述,现在让我们详细探讨一下各个步骤。首先,利用docker stop
指令来终止所有正在执行的容器,这是确保新应用程序能够无干扰启动的重要一步。随后,通过docker rm
命令来移除这些已停止的容器,以释放资源。接下来,使用docker rmi
指令来删除所有未标记的镜像,这些镜像可能占据了不必要的存储空间。最后,通过执行docker run
命令来启动新的容器,在运行此命令时,务必指定适当的参数,例如卷挂载路径,以便数据持久化,端口映射以确保网络访问,以及重启策略以应对潜在问题。通过这些步骤,你可以确保Spring Boot应用程序在Docker中能够高效且稳定地运行。
在完成上述准备工作后,现在我们可以着手启动Spring Boot应用程序了。在Docker中,启动应用程序的过程相对简洁。首先,确保你已经编写并构建了适当的Dockerfile,其中包含了运行Spring Boot应用程序所需的所有指令和配置。接着,使用docker build
命令来构建Docker镜像,该命令将读取Dockerfile中的指令,并生成一个包含应用程序及其依赖的镜像。一旦镜像构建完成,就可以通过docker run
命令来启动新的容器,同时指定必要的参数,如卷挂载路径、端口映射等,以确保应用程序能够顺利运行并访问相关资源。通过这些步骤,你可以轻松地在Docker中启动并运行Spring Boot应用程序。
在Docker中启动Spring Boot应用程序的流程如下:首先,通过构建容器镜像来准备运行环境。接着,停止并移除原有的容器和旧镜像,以确保新的运行环境得以建立。随后,使用新的镜像来启动新的容器和应用程序,从而确保应用程序能够在全新的环境中运行。最后,通过执行start.sh
脚本来正式启动程序,并测试其运行状态。在此过程中,我们可以利用Docker的命令行工具和脚本文件来自动化执行这些步骤,提高启动效率。
六、注册成Linux服务启动
在类Unix系统中,通常使用init.d脚本来管理系统服务。若要将Spring Boot应用程序注册为Linux服务,首先需要使用打包插件将应用程序打成可执行的jar包,并在jar包同级目录下增加一个同名的配置文件。例如,对于名为demo.jar的应用程序,应创建一个名为demo.conf的配置文件,其中包含运行该应用程序所需的各种设置,如JAVA_OPTS、PID_FOLDER和LOG_FOLDER等。
完成配置后,通过执行以下命令将jar包软链接到init.d目录:
sudo ln -s /opt/app/server/demo.jar /etc/init.d/demo
执行完毕后,在/etc/init.d目录下将出现一个浅蓝色的连接,表明服务已成功注册并准备启动。接下来,你可以使用service命令或chkconfig命令来管理该服务的启动和停止。
接下来,你可以通过执行service xxx start
、service xxx restart
、service xxx status
或service xxx stop
等命令来管理服务的启动、重启、查看状态或停止。其中,xxx代表你的服务名称,如demo。
并且,你可以观察到与jar文件位于同一目录的配置文件已经生效。无论是以root用户还是非root用户启动服务,最终都是以我们指定的用户身份来运行服务,这无疑带来了极大的便利。
七、通过systemd服务启动
systemd是Linux系统上的一个关键组件,它提供了系统和服务的管理功能。通过将Spring Boot应用程序配置为systemd服务,你可以更有效地对其进行管理。在开始之前,你需要在/etc/systemd/system/目录下创建一个名为your-app-name.service的文件,其中包含服务的配置信息。
进入/etc/systemd/system/目录后,你可以创建一个如demo.jar的service文件,并添加以下内容:
[Unit] Description=demo After=syslog.target
[Service] User=xxx ExecStart=/usr/bin/java -jar /opt/app/server/demo.jar SuccessExitStatus=
这样,你就成功地将Spring Boot应用程序配置为systemd服务,并可以通过systemd进行启动和管理了。 143[Install] WantedBy=multi-user.target
在配置文件中,你需要指定应用程序的运行用户,这通过[Service]下的User字段来完成。ExecStart字段中的命令应该与直接使用java命令启动应用程序时的命令保持一致。完成配置后,使用以下命令来重新加载systemd的配置并启动服务:
systemctl daemon-reloadsystemctl start demo
你可以通过执行以下命令来查看服务的运行状态:
systemctl status demo
八、总结
在SpringBoot应用程序打包成jar之后,存在多种启动方式,每种方式都有其特定的适用场景和优缺点。不同的公司、团队以及个人,根据其喜好和需求,可能会选择不同的启动方式。例如,对于追求简便性的团队,可能会选择使用supervisor,但这种方式可能牺牲了可维护性,并可能增加系统开销。对于规模较大的团队,可能会考虑使用docker或脚本启动来提供更多的灵活性和可维护性。对于熟悉Linux环境的开发者,init.d和systemd方式可能更合适,它们提供了强大的系统级管理功能。还有一些开发者倾向于使程序本身具备自我运行的能力,因此会选择打包成可执行jar的方式。综合考虑,个人推荐采用可执行jar和init.d注册运行(以非root用户身份)的方式,当然,也可以根据实际情况选择其他方式。