SpringBoot打包
使用springboot作为框架,项目打包发布有两种方式,一种是打jar包,使用springboot内置的tomcat启动;一种是打成war包,通过传统的外部tomcat进行发布。对这两种打包方式进行一个简单的总结:
一、打jar包发布
springboot打jar包后内置tomcat,生成的jar包是一个可执行的jar.
定义成包格式(不配置默认打包成jar包)
<!---定义成jar的方式-->
<packaging>jar</packaging>
pom.xml中需要配置一下maven打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
打包命令 项目根路径 调出控制台CMD ,输入命令:mvn clean package
或者使用idea的maven管理工具,先clean,再package。
ps:maven工具栏隐藏的话通过View->Tool Windows ->Maven Projec唤出maven工具栏
打包时可以先关闭maven的test功能(防止本地打包需要连接本地ping不通的生产库导致的打包失败问题)。
在项目目录/target目录下生成可执行jar.将jar包上传到环境上。
执行命令 java -jar xxxx.jar即可
如果需要关掉窗口不会关停项目,执行命令
nohup java -jar xxxx.jar &
- 命令结尾没有 “&” ,则变成 “java -jar XXX.jar ” ,表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出
- 命令结尾添加 “&” ,则变成 “java -jar XXX.jar &” ,表示在当窗口关闭时,程序才会中止运行。&代表让该命令在后台执行。
- 命令 "nohup java -jar XXX.jar &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。注意,该作业的所有输出被重定向到nohup.out的文件中。
- 命令 "nohup java -jar XXX.jar > Log.log &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,并且该作业的所有输出被重定向到Log.log的文件中。“ > Log.log ” 该命令就是指定日志输出的文件。
- ">>"表示将输出以追加的方式重定向到Log.log中。
jar包情况下debug:
jar包情况下的远程debug,通过启动命令参数来设置。
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8091,server=y,suspend=y -jar xxxxx.xxx.jar
相关参数含义:
-Xdebug是通知JVM工作在DEBUG模式下(这里不加也是可以的)
-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式
server参数是指是否支持在server模式的VM中,server=y:调试服务端;server=n:调试客户端
suspend指明,是否在调试客户端建立起来后,再执行JVM,suspend=y:启动时即监听端口,等客户端连接(即IDEA远程debug连上端口)开始初始化,适合启动报错时的debug错误排查;
suspend=n:不等待客户端连接,适合运行态的debug错误排查。
二、打成war包发布
pom.xml中添加javax.servlet-api的依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
排除springboot内置tomcat的干扰:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
修改启动类
修改之前
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
}
修改之后
@SpringBootApplication
public class MainApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MainApp.class);
}
}
执行打包命令即可生成war包,将war包放在tomcat的webapp目录下即可。