一.jar包部署方式(官方推荐方式,使用简单)

(1)springboot默认工程打包方式为jar包

spring bootjar包部署 spring boot项目部署_java


(2)通过Spring Initializr构建项目,springboot自动在pom文件中添加maven编译插件

<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

(3)打包

spring bootjar包部署 spring boot项目部署_java_02


(4)打包成功后,进入target目录找到打好的.jar包

spring bootjar包部署 spring boot项目部署_spring boot_03


(5)把jar包上传到服务器

(6)运行项目即可

运行命令:java -jar 包名.jar

spring bootjar包部署 spring boot项目部署_jar_04


二.war包部署方式

(1)pom文件中添加打包方式

//<packaging>jar</packaging>
<packaging>war</packaging>

(2)添加servlet-api依赖

<!--添加servlet-api的依赖,用来打war包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

(3)排除springboot内置Tomcat启动器,因为打成war后我们会放到外部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>

(4)修改启动类,如果是war包发布,需要增加SpringBootServletInitializer子类,并重写其configure方法,或者将main函数所在的类继承SpringBootServletInitializer,并重写configure方法当时打包为war时上传到tomcat服务器中访问项目始终报404错就是忽略了这个步骤!!!

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//数据源自动配置类排除
public class SpringbootDataaccessApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDataaccessApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(SpringbootDataaccessApplication.class);
    }
}

(5)pom文件中添加maven编译插件

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

(6)执行package打包

spring bootjar包部署 spring boot项目部署_spring_05


(7)把war放入外部Tomcat的web服务器下的webapp包下,启动Tomcat后即可访问

spring bootjar包部署 spring boot项目部署_spring bootjar包部署_06


spring bootjar包部署 spring boot项目部署_jar_07

(8)IDEA添加Tomcat,对当前war进行部署

spring bootjar包部署 spring boot项目部署_spring boot_08


spring bootjar包部署 spring boot项目部署_spring_09


spring bootjar包部署 spring boot项目部署_java_10

spring bootjar包部署 spring boot项目部署_spring_11


注意:将项目打成war包,部署到外部的tomcat中,这个时候,不能直接访问spring boot 项目中配置文件配置的端口。application.yml中配置的server.port配置的是spring boot内置的tomcat的端口号, 打成war包部署在独立的tomcat上之后, 配置的server.port是不起作用的。一定要注意这一点!!

spring bootjar包部署 spring boot项目部署_spring bootjar包部署_12

三.部署方式对比

(1)SpringBoot项目打包时能打成 jar 与 war包,对比两种打包方式:
jar更加简单方便,使用 java -jar xx.jar 就可以启动。所以打成 jar 包的最多。
而 war包可以部署到tomcat的 webapps 中,随Tomcat的启动而启动。
具体使用哪种方式,应视应用场景而定。
(2)打jar包时不会把src/main/webapp 下的内容打到jar包里 (你认为的打到jar包里面,路径是不行的会报404) 打war包时会把src/main/webapp 下的内容打到war包里。
(3)打成什么文件包进行部署与项目业务有关,就像提供 rest 服务的项目需要打包成 jar文件,用命令运行很方便。
(4)而有大量css、js、html,且需要经常改动的项目,打成 war 包去运行比较方便,因为改动静态资源可以直接覆盖,很快看到改动后的效果,这是 jar 包不能比的(项目打成 jar 包运行,一段时间后,前端要对其中某几个页面样式进行改动,使其更美观,那么改动几个css、html后,需要重新打成一个新的 jar 包,上传服务器并运行,这种改动频繁时很不友好,文件大时上传服务器很耗时,那么 war包就能免去这种烦恼,只要覆盖几个css与html即可)