SpringBoot項目打成jar包和war包部署在Tomcat服務器上的區別

本文所使用的 SpringBoot 版本:1.5.19.RELEASE
java 版本:1.8
tomcat版本:7.0.91

一、jar包

pom.xml

<groupId>com.weimo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>jar包部署</description>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <finalName>demo</finalName>
            </configuration>
        </plugin>
    </plugins>
</build>

SpringBoot 打成 jar 包,內嵌了自帶的 tomcat 配置,可以直接執行 java -jar *.jar 的命令運行。該命令只是啓動一個執行 jar mian 的 jvm 進程,當 spring-boot-starter-web 包含嵌入式 tomcat 服務器依賴項時,執行 java -jar 則會啓動 Application Server。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、war包
pom.xml

<groupId>com.weimo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>war包部署</description>
<packaging>war</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <finalName>demo</finalName>
            </configuration>
        </plugin>
    </plugins>
</build>

將 war 包放在 tomcat/webapps 目錄下,這種方式會使用到外部的 tomcat,如果這樣啓動之後 tomcat 報錯:

java.util.zip.ZipException: error in opening zip file
...
org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start: 

此時還需要在 Application 類繼承 SpringBootServletInitializer,這個類是 servlet 的初始化組件。

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {

    // 不重寫此方法也可以啓動成功
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        System.out.println("啓動完成");
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章