Springboot项目部署到外部Tomcat

前言:用过Springboot的同学都知道,Springboot采用了约定大于配置的思想,提供了大量简化配置的操作,使得我们从繁重的SpringMVC项目配置中解脱出来,只需要在.properties或者.yml文件上给指定的参数配置适当参数值即可,然后Springboot会自动应用;个人认为Springboot的优势在于提供快速便捷的开发模式,比如快速开发服务接口,通过mvn打包成jar包,然后通过java -jar命令行的方式(内置服务器)启动服务,这是正确的应用之道;Springboot同样支持web项目(包含各种html、css、js等前端资源)的开发和部署到外部服务器,但此时就需要做适当调整;

去年接了个应用类项目,就手欠采用Springboot开发web项目,项目目录结构如下:

发过程中倒是方便无比,但部署时就需要打包成war包部署到外部服务器,就需要改动配置并做适当调整,本文以此为契机,记录下操作过程,方便自己以及后来者!

理清思路,有以下几个地方需要处理:

1、由于服务器上面使用的一般是war包,所以此处将项目打包方式由jar包->war包

2、使用外部服务器,所以去除Springboot内置的服务器

3、由于部分jar包在外部服务器已经包含了,所以适当去除

4、重点:Springboot项目启动时,会创建Spring容器,容器中包含大量的Servlet、Filter和Spring Beans对象,此时由于使用外部的服务器,所以我们需要将Spring容器中的对象绑定到服务器上,我们采用官方推荐的方式,让启动类继承SpringBootServletInitiallizer并重写configure方法,官方demo如下:

下面开始,从创建一个Springboot项目,到最终通过浏览器访问为止,步骤如下:

1、极简新建一个Springboot项目适当调整,新建完成后pom.xml和项目目录结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.dongnao</groupId>
    <artifactId>springboot-tomcat-deployment-demo</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
    <name>springboot-tomcat-deployment-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、新建一个HelloController.java,代码如上所示,启动Springboot项目,测试下新建项目是否ok,结果如下:

3、修改Springboot项目启动类,让该类继承SpringBootServletInitializer并重写configure方法,修改后代码如下:

package com.dongnao;

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 SpringbootTomcatDeploymentDemoApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootTomcatDeploymentDemoApplication.class);
    }
}

4、修改pom.xml,修改项目打包方式,移除springboot内置tomcat服务器,适当调整tomcat的lib文件夹里面存在的,当项目里面却引用的,说白了就是既然tomcat服务器已经提供了某些通用jar包,那么咱们就在maven里面标识出来,修改后的pom.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.dongnao</groupId>
    <artifactId>springboot-tomcat-deployment-demo</artifactId>
    <version>0.0.1</version>
    <!-- 指定项目打包方式 -->
    <packaging>war</packaging>
    <name>springboot-tomcat-deployment-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 移除Springboot内置tomcat服务器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 以下三个dependency根据实际情况添加,不是必须,此处为了演示 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>springboot-deploy</finalName>
        <plugins>
            <!-- 配置war打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!-- 禁止当项目中web.xml不存在时抛出异常 -->
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <!-- 配置编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5、依次通过idea开发工具的maven工具类,依次执行以下1,2两个操作,得到war包,如图,这个就是我们要放到服务器中:

6、找到一个tomcat服务器,将war包放到tomcat/webapps文件夹下面,启动服务器,服务器启动成功后,采用:服务器地址 + 端口 + war名称 + 接口名称,我的就是:http://localhost:8080/springboot-deploy/showDeploymentResult,结果如下:

好了,转换成功!

猜你喜欢

转载自blog.csdn.net/yu102655/article/details/89562488