前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >固化的Maven依赖和嵌入式Servlet容器

固化的Maven依赖和嵌入式Servlet容器

作者头像
星哥玩云
发布2022-09-14 21:45:40
5660
发布2022-09-14 21:45:40
举报
文章被收录于专栏:开源部署开源部署

1、理解固化的Maven依赖

打开firts-springboot应用的pom.xml文件,我们可以发现我们在引入依赖时并没有指定版本号。比如引入spring-boot-starter-web的时候。

这些版本信息均继承于spring-boot-starter-parent,降低了Spring Boot应用管理依赖的成本。

1.1、查看spring-boot-starter-parent

重要的部分:

代码语言:javascript
复制
  <properties>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <resource.delimiter>@</resource.delimiter>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>${java.version}</maven.compiler.target>
  </properties>
  <dependencies>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.2.6.RELEASE</version>
     </dependency>
  </dependencies>

我们发现只处只限定了spring-boot-maven-plugin的版本信息,其它均无限定。

1.2、查看spring-boot-dependencies

部分截图:

image202005191034042130341342.png
image202005191034042130341342.png

在spring-boot-dependencies中锁定的大量的版本信息

2、嵌入式Web容器

2.1、嵌入式Web容器概述

Spring Boot 应用直接嵌入Tomcat、Jetty和Undertow作为其核心特性,可通过指定容器的Maven依赖来切换Spring Boot应用的嵌入式容器类型,无须代码层面上的调整,不同的嵌入器存在专属的配置属性,自然也不再需要以WAR文件进行部署。

2.2、嵌入式Servlet Web容器

Spring Boot支持三种嵌入式Servlet3.1+容器

如表:

Name

Servlet Version

Tomcat8.5

3.1

Jetty 9.4

3.1

Undertow 1.4

3.1

2.2.1、Tomcat 作为嵌入式Servlet Web容器

Spring Boot 2.0 的实现是它利用嵌入式Tomcat API 构建为TomcatWebServer Bean,由Spring 应用上下文将其引导,嵌入式Tomcat组件的运行,以及ClassLoader的装载均由Spring Boot框架代码实现。

Spring Boot Maven插件spring-boot-maven-plugin 采用零压缩模式,将应用目录归档到JAR或WAR文件,相当于jar命令归档的过程中添加-0参数

案例:使用jar命令归档文件

代码语言:javascript
复制
jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .
代码语言:javascript
复制
jar -0cvf first.jar FirstSpringbootApplication.class
2.2.2、Jetty 作为嵌入式Servlet Web容

修改pom.xml文件如下:

代码语言:javascript
复制
	   	 <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>
				<!--jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

经验:

Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器

2.2.3、Undertow 作为嵌入式Servlet Web容器

修改pom.xml文件如下:

代码语言:javascript
复制
		<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>
        <!--jetty-->
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>-->
        <!--undertow-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

经验:

SpringBoot2中可以将Web服务器切换到Undertow来提高应用性能

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、理解固化的Maven依赖
    • 1.1、查看spring-boot-starter-parent
      • 1.2、查看spring-boot-dependencies
      • 2、嵌入式Web容器
        • 2.1、嵌入式Web容器概述
          • 2.2、嵌入式Servlet Web容器
            • 2.2.1、Tomcat 作为嵌入式Servlet Web容器
            • 2.2.2、Jetty 作为嵌入式Servlet Web容
            • 2.2.3、Undertow 作为嵌入式Servlet Web容器
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档