打成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
或者 创建软链接
- ln -s /home/username/XXX.jar /etc/init.d/XXX (注意jar包目录为全路径)
- 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 后面不带“/”
>> 如上,都是自己遇到的问题,若有不妥之处,还望大家多多指正!!!