前言
Spring Boot支持传统部署和更现代的部署形式。jar跟war都支持,这里参考springboot参考手册学习记录
jar 和 war 包的区别
jar包和war包都可以看成压缩文件,都可以用解压软件打开,jar包和war包都是为了项目的部署和发布,通常在打包部署的时候,会在里面加上部署的相关信息。这个打包实际上就是把代码和依赖的东西压缩在一起,变成后缀名为.jar和.war的文件,就是我们说的jar包和war包。但是这个压缩包可以被编译器直接使用,把war包放在tomcat目录的webapp下,tomcat服务器在启动的时候可以直接使用这个war包。通常tomcat的做法是解压,编译里面的代码,所以当文件很多的时候,tomcat的启动会很慢。
jar包和war包的区别:jar包是java打的包,war包可以理解为javaweb打的包,这样会比较好记。jar包中只是用java来写的项目打包来的,里面只有编译后的class和一些部署文件。而war包里面的东西就全了,包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。
两种方式
jar
springboot项目支持创建可执行Jar,参考手册第11.5. Creating an Executable Jar就有对这样的介绍。
如果需要打jar包直接进入idea之后使用maven然后进行 package 直接进行jar包创建
war
参考手册第92.1 Create a Deployable War File就有对这样的介绍:
由于Spring WebFlux并不严格依赖于Servlet API,并且应用程序默认部署在嵌入式反应器Netty服务器上,所以WebFlux应用程序不支持War部署。
生成可部署war文件的第一步是提供SpringBootServletInitializer子类并覆盖其配置方法。这样做可以利用Spring Framework的Servlet 3.0支持,让您在Servlet容器启动应用程序时配置它。通常,您应该更新应用程序的主类以扩展SpringBootServletInitializer,同时,要将Spring应用程序部署到外部服务器,必须确保servlet初始化器直接实现WebApplicationInitializer(即使是从已经实现它的基类扩展而来)。如下例所示:
@SpringBootApplication
public class MyspringbootApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyspringbootApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyspringbootApplication.class, args);
}
}
在创建springboot项目时,默认是jar包,如果是想要打成war包,需要修改pom.xml,打包方式跟生成路径跟jar的一样,过程的最后一步是确保嵌入的servlet容器不会干扰部署war文件的servlet容器。为此,需要将嵌入式servlet容器依赖项标记为所提供的。
<!--默认jar-->
<packaging>war</packaging>
<!-- 如需打成war包 确保嵌入的servlet容器不会干扰部署war文件的servlet容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--构建工具-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
得到war包后把它丢到服务容器里(放在webapps文件夹下)run起来就行了,要注意的是使用了外部容器,记得改Tomcat的端口,在server.xml的Connector节点
最后
推荐直接使用jar的方式运行。