概述
SpringBoot项目普遍使用jar包安装部署,这样是最方便也是推荐的方式,网上也是很多这样的教程。可对于传统war方式部署资料也是参差不齐,今天带小伙伴一起来看看war包部署的步骤。
一、jar包和war包
先来说说传统jar和war的几点区别(了解)
war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。
war包是做好一个web应用后,通常是网站,打成包部署到容器中;jar包通常是开发时要引用通用类,打成包便于存放管理。
war是Sun提出的一种Web应用程序格式,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织;classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)可以打包成jar放到WEB-INF下的lib目录下。
JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。
WAR文件:就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个war扩展名。
SpringBoot可执行jar包
SpringBoot只要引入了web-starter后依赖引入了一个内嵌的tomcat包,发布运行程序时其实运行的是程序中的tomcat,因此不需要传统tomcat将程序添加到webapps目录中运行。
但是对于一些实施或者运维人员习惯了传统tomcat的方式部署程序,并且线上的项目经常性的修改页面(html)或者xml(sql)文件。如果是打成war包部署,运行tomcat会对war包自动解压,修改页面、xml、配置文件等直接修改文件就可以了。对于说打成jar包的程序,修改起来就麻烦了很多,总不能修改一个文件就重新上传jar包吧(当然jar包可能通过手动解压 -> 修改文件 -> 手动再打jar包)。所以打成war包的场景还是不少的。
二、打war包步骤
1. 修改pom.xml 将打包方式修改为war
<packaging>war</packaging>
2. 为开发时方便,需要手动添加内嵌tomcat(作用域为编译、测试期使用),并排除掉web-start中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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3. 引导类(主类)继承ServletInitializer重写configure方法
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class SipApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SipApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SipApplication.class);
}
}
4. 修改打成war文件名称及运行waven打包命令生成war包
修改pom.xml中finalName为打成war包文件名称
<build>
<finalName>HRP-SIP</finalName>
......
项目路径下执行maven打包命令
mvn clean package
打包成功后刷新项目target目录查看打war文件
5. 将war包丢到tomcat webapps目录并运行tomcat
如果运行成功恭喜,可是我没有运行成功。
出现类似如下报错
说明:我使用SpringBoot新版本2.4.3;本地tomcat版本8.0.9
再查看SpringBoot中内嵌的tomcat版本为9.0.43
应该是tomcat8.x不支持新版本的SpringBoot
导致的错误,官网重新下载tomcat9.0.43(最新版tomcat)后继续运行war。
完成
再补充一个知识点如果tomcat启动时控制台存在乱码,修改apache-tomcat-9.0.43\conf\logging.properties文件如下属性为GBK
即可。
总结
以上就是SpringBoot打成war包的全部,关于程序到底是jar还是war不可厚非,作为程序员都是基本技能。对比来说打成jar包,不管开发程序中和还是部署程序来说都更容易些,所以出错也会少些。
(用心写好每一行程序和文字:完~)