关于SpringBoot打包部署-笔记

本文介绍了如何将SpringBoot应用打包为jar和war,并详细讲解了Linux环境下的部署方法,包括后台运行、调整JVM参数、监控GC、重启应用以及通过脚本管理应用。此外,还提到了解决日志中文乱码问题的方案。
摘要由CSDN通过智能技术生成

打成jar包:

1.cd到项目更目录(和pom.xml同级)

mvn clean package -DskipTests=true

2.在项目的target目录下会生成jar包,命名一般是 项目名+版本号.jar,启动jar包

java -jar XXX.jar

这种方式只要控制台关闭,服务就不能访问了,下面是后台运行的方式启动(并写入到日志文件,该logs.log如果不存在自动创建):

nohup java -jar XXX.jar > ./logs.log &

也可以在启动的时候选择读取不同的配置文件

java -jar XXX.jar --spring.profiles.active=dev

也可以在启动的时候设置 jvm 参数

nohup java -Xms10m -Xmx80m -jar XXX.jar &

打成war包:

1.pom.xml文件中

<packaging>jar</packaging>  

改为:

<packaging>war</packaging>

打包时排除tomcat

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

在这里将 scope 属性设置为 provided,这样在最终形成的 WAR 中不会包含这个 JAR 包,因为 Tomcat 或 Jetty 等服务器在运行时将会提供相关的 API 类。

2.注册启动类

创建 ServletInitializer.java,继承 SpringBootServletInitializer ,覆盖 configure(),把启动类 Application 注册进去。外部 Web 应用服务器构建 Web Application Context 的时候,会把启动类添加进去。

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

3.最后执行

mvn clean package -DskipTests=true

会在 target 目录下生成:项目名+版本号.war文件,拷贝到 tomcat 服务器中启动即可。

linux部署:

1.可以根据 Java 自带的 jinfo 命令:

jinfo -flags pid

来查看 jar 启动后使用的是什么 gc、新生代、老年代分批的内存都是多少,示例如下:

-XX:CICompilerCount=3 -XX:InitialHeapSize=234881024 -XX:MaxHeapSize=3743416320 -XX:MaxNewSize=1247805440 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=78118912 -XX:OldSize=156762112 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
  • -XX:CICompilerCount  :最大的并行编译数
  • -XX:InitialHeapSize 和 -XX:MaxHeapSize :指定 JVM 的初始和最大堆内存大小
  • -XX:MaxNewSize : JVM 堆区域新生代内存的最大可分配大小
  • -XX:+UseParallelGC :垃圾回收使用 Parallel 收集器

2.如何重启

直接 kill 掉进程再次启动 jar 包

ps -ef|grep XXX 
##拿到对于XXX程序的pid
kill -9 pid
## 再次重启
Java -jar  xxxx.jar

当然这种方式比较传统和暴力,所以建议大家使用下面的方式来管理

3.脚本执行

pom.xml中需要配置

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

启动方式:

./XXX.jar

或者 创建软链接

  1. ln -s /home/username/XXX.jar /etc/init.d/XXX (注意jar包目录为全路径)
  2. chmod -x /etc/init.d/XXX

这样就可以使用start|stop|restart命令来管理应用了。

/etc/init.d/XXX start|stop|restart

或者

service XXX start|stop|restart|status

注意:启动之后,查看日志发现中文有乱码的情况,参考如下解决方案(如果没有这种情况,可以忽略)https://blog.csdn.net/weixin_39516640/article/details/103127697

移出软链接

remove -rf /etc/init.d/XXX

注意:remove -rf /etc/init.d/XXX 后面不带“/”

 

>> 如上,都是自己遇到的问题,若有不妥之处,还望大家多多指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值