SpringBoot jar包和war包的区别及部署
spring boot既可以打成war发布,也可以找成jar包发布。默认采用jar包的形式。
jar包与war包的区别
jar包:直接通过内置tomcat运行,不需要额外安装tomcat。如需修改内置tomcat的配置,只需要在springboot的配置文件中配置。内置tomcat没有自己的日志输出,全靠jar包应用输出日志。但是比较方便,快速,比较简单。
war包:传统的应用交付方式,需要安装tomcat,然后放到waeapps目录下运行war包,可以灵活选择tomcat版本,可以直接修改tomcat的配置,有自己的tomcat日志输出,可以灵活配置安全策略。相对打成jar包来说没那么快速方便。
SpringBoot的jar包与普通jar的区别
SpringBoot的JAR包与传统JAR包的不同之处在于里面有一个名为lib的目录,该目录中包含了应用所依赖的其他JAR包和内置嵌入的Tomcat。
除了业务源码所编译形成的CLASS以外,在org目录下还有许多Spring所提供的CLASS,正是依赖这些CLASS加载位于lib目录下JAR中的类。这样的加载机制与在OSGi bundle中声明Bundle-Classpath很类似,不过在OSGi中会由容器来负责加载指定路径下的类。
![SpringBoot jar包和war包的区别及部署插图 image](http://www.choupangxia.com/wp-content/uploads/2019/11/image-77.png)
![SpringBoot jar包和war包的区别及部署插图1 image](http://www.choupangxia.com/wp-content/uploads/2019/11/image-78-1024x561.png)
jar包与war包package不同
packaging指定不同,一个是war,一个jar。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.vcyber.www</groupId> <artifactId>vcyber-api</artifactId> <!--这个地方有所区别 --> <!--<packaging>war</packaging> --> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>vcyber-api</name> <url>http://maven.apache.org</url>
继承的方式不同
war包需启动类继承SpringBootServletInitializer,而jar包不需要。war继承的方式:
@SpringBootApplication @RestController public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application.class,args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } }
spring boot内置tomcat
springboot内置tomcat容器,默认tomcat8的版本,war包部署时,需要在pom文件中有关跟tomcat有关系的jar包scope都设置成provided。去掉spring boot内置的tomcat代码:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> <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>
运行
jar包可以直接通过java -jar来运行。Linux系统中关闭了控制台也就停止该Java进程。因此,需要以后台进程的形式启动。
nohup java -jar springboot.jar --server.port=port &
war包可以将其放到常用的web容器tomcat的webapps目录下,启动tomcat即可。
关于SpringBoot的war包使用全过程及demo,可参考该文章《SPRINGBOOT打成WAR包在TOMCAT或WILDFLY下运行》。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://www.choupangxia.com/2019/11/14/springboot-jar-war/