SpringBoot——使用外置的Tomcat服务器

导读:本篇文章讲解 SpringBoot——使用外置的Tomcat服务器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1 前言

Spring Boot 版本: 2.3.2.RELEASE

SpringBoot官方文档——Create a Deployable War File

SpringBoot的 Web模块 默认内嵌了Tomcat作为Servlet容器,因此,我们可以直接编写SpringBoot 启动类,直接通过启动类,一键开启Tomcat服务,确实是 nb plus!!!

但是,有些情况下,我们的Tomcat服务器,需要另外专门部署,会更好维护,此时,我们就考虑排除SpringBoot 的 Web模块中的Tomcat依赖,进而可以将SpringBoot应用部署到外部的Tomcat容器中。

2 修改步骤

2.1 修改打包方式(jar -> war)

修改 pom.xml 文件,修改打包方式为 war

<groupId>com.springboot.template</groupId>
<artifactId>servlet-container-war</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 这里打成war包 若打jar,需将war改为jar -->
<packaging>war</packaging>

2.2 排除 SprignBoot的Web模块中的Tomcat依赖

这里有两种方案:(官方文档使用第一种)

2.2.1 将嵌入的Tomcat依赖方式改成 provided

修改 pom.xml 文件,将嵌入的Tomcat依赖方式改成provided(编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat),确保嵌入式servlet容器不干扰war文件所部署到的servlet容器。

<!--SpringBoot 的 Web模块内嵌的tomcat依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- 编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat -->
    <scope>provided</scope>
</dependency>

注意:

将SpringBoot的Web模块 提供的嵌入式servlet容器依赖关系标记为provided时,将生成可执行的war文件,其中提供的依赖关系打包在lib提供的目录中。

这意味着,除了可以部署到servlet容器之外,还可以通过在命令行上使用java -jar运行该应用程序。

2.2.2 直接排除Web模块中的Tomcat依赖

修改 pom.xml 文件,在引入的Web模块处修改,如下:

排除内嵌的Tomcat依赖

<!-- SpringBoot的web模块 依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除SpringBoot的web模块默认内嵌的Servlet容器 Tomcat-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

由于排除了Tomcat依赖,没有了servlet实现,因此,需要引入servlet依赖

<!-- servlet 依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <!--<scope>provided</scope>-->
</dependency>

注意:

Spring Boot 必须在Servlet 3.0规范以上容器中运行。

2.3 修改启动类,并重写初始化方法

如果打算以 war 或 jar (可执行应用程序) 的形式启动应用程序,则需要使用SpringBootServletInitializer回调可用的configure方法和类似于以下类的main方法中的共享方法来共享构建器的自定义项:

2.3.1 官方文档的写法

// 修改 SpringBoot 启动类
// 继承 SpringBootServletInitializer 类
// 重写 configure 方法
@SpringBootApplication
public class SpringBootStartApplication  extends SpringBootServletInitializer {

    public static void main(String[] args) {
        configureApplication(new SpringApplicationBuilder()).run(args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return configureApplication(builder);
    }

    private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
        return builder.sources(Application.class).bannerMode(Banner.Mode.OFF);
    }

}

2.3.2 我的写法

在SpringBoot中我们平常用main方法启动的方式,都有一个SpringBootApplication的启动类,类似代码如下:

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

而我们现在需要类似于web.xml的配置方式来启动spring应用,为此,我们在SpringBootStartApplication类的同级上添加一个ServletInitializer类,其代码如下:

// 继承 SpringBootServletInitializer 类
// 重写 configure 方法
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 传入SpringBoot应用的主程序
        // 自定义应用程序或调用application.sources(...)以添加源
        // 由于我们的示例本身就是@Configuration类(通过@SpringBootApplication)
        // 我们实际上不需要重写此方法
        return builder.sources(ServletContainerWarApplication.class);
    }

}

3 生成 webapp 目录

在这里插入图片描述
修改完成后, 记得apply,就会生成webapp目录,以及目录下的 /WEB-INF/web.xml 文件

4 部署到外部的Tomcat容器

4.1 打成 war 包

在项目根目录下(即包含pom.xml的目录)(命令行 或 终端)执行maven打包操作:

mvn clean package

等待打包完成,出现 [INFO] BUILD SUCCESS 即为打包成功

或者,直接使用 IDEA 打包
在这里插入图片描述
将war包放到Tomcat的weapps目录下,启动服务器就可以使用了

4.2 浏览器验证

http://你的域名或IP地址:[端口号]/[打包项目名]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69767.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!