IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot-2-嵌入式容器 -> 正文阅读

[Java知识库]SpringBoot-2-嵌入式容器

作者:https://img-blog.csdnimg.cn/img_convert/90eb6287a09bfda7b058c8e6e8d7f8a2.png

SpringBoot—嵌入式容器

SpringBoot支持嵌入式容器(比如:Apache Tomcat, Eclipse Jetty, RedHat Undertow),默认情况下使用tomcat.

1.修改Tomcat版本

SpringBoot 2.6.3版本默认采用的是*Apache Tomcat/9.0.56版本

日志显示:

INFO?25080?---?[???????????main]?org.apache.catalina.core.StandardEngine??:?Starting?Servlet?engine:?[Apache?Tomcat/9.0.56]

修改了pom.xml

<properties>
????<tomcat.version>9.0.58</tomcat.version>
</properties>

后重新运行

INFO?3840?---?[???????????main]?org.apache.catalina.core.StandardEngine??:?Starting?Servlet?engine:?[Apache?Tomcat/9.0.58]

2.修改端口号和web路径

2.1 通过配置文件修改端口号和web路径

2.1.1 application.properties和application.yml的异同

在我们创建SpringBoot项目的时候,会在/main/resources/文件夹下新建application.properties配置文件,但是我们经常会把 application.properties修改成application.yml文件,这两种格式存在区别如下:

格式区别

  • properties配置文件通过**=**进行赋值,没有层次感

  • yml配置文件通过key:value分层进行赋值,比较有层次感

执行顺序区别

如果properties配置文件和yml配置文件同时存在,yml配置会先加载并且后加载的properties文件会覆盖yml配置文件

示例

application.properties配置文件:

server.port=8889

application.yml配置文件

server:
??port:?8899
??servlet:
????context-path:?/springweb

两个文件并存情况下,运行项目结果:

INFO?968?---?[???????????main]?o.s.b.w.embedded.tomcat.TomcatWebServer??:?Tomcat?started?on?port(s):?8889?(http)?with?context?path?'/springweb'

访问页面http://localhost:8889/springweb/

图片

配置相同的情况下application.properties覆盖application.yml

2.1.2通过WebServerFactoryCustomizer进行修改

在SpringBoot1.x的时候使用的是EmbeddedServletContainerCustomizer到SpringBoot2.x后WebServerFactoryCustomizer替代了EmbeddedServletContainerCustomizer。

SpringBoot1.x EmbeddedServletContainerCustomizer

????@Bean
????public?EmbeddedServletContainerCustomizer?embeddedServletContainerCustomizer(){
????????return?new?EmbeddedServletContainerCustomizer()?{
????????????@Override
????????????public?void?customize(ConfigurableEmbeddedServletContainer?container)?{
????????????????//设置端口
????????????????container.setPort(8883);
????????????????container.setContextPath("/springweb");
????????????}
????????};
????}

SpringBoot2.x ?WebServerFactoryCustomizer

package?com.learn.springboot.springbootpart2.config;

import?org.springframework.boot.web.server.WebServerFactoryCustomizer;
import?org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;

/**
?*?@program:?spring-boot-part2
?*?@package:?com.learn.springboot.springbootpart2.config
?*?@classname:?PortConfig
?*?@description:?端口和web修改
?*?@author:?zbb
?*/
@Configuration
public?class?PortConfig?{
????
????@Bean
????public?WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>?webServerFactoryCustomizer(){

????????return??new?WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>()?{
????????????@Override
????????????public?void?customize(ConfigurableServletWebServerFactory?factory)?{
????????????????//设置web路径
????????????????factory.setContextPath("/webpath");
????????????????//设置端口
????????????????factory.setPort(8888);
????????????}
????????};
????}
}


运行结果为

图片

2.1.3 通过WebServerFactoryCustomizer进行修改

**SpringBoot1.x EmbeddedServletContainerFactory **

??@Bean??
????public?EmbeddedServletContainerFactory?servletContainer()?{??
????????TomcatEmbeddedServletContainerFactory?tomcat?=?new?TomcatEmbeddedServletContainerFactory();??
????????tomcat.setPort(8879);??
????????tomcat.setContextPath("/webserver");??
????????return?tomcat;??
????}??

SpringBoot2.X ?ServletWebServerFactory

????@Bean
????public?ServletWebServerFactory??servletContainer()?{
????????TomcatServletWebServerFactory?tomcat?=?new?TomcatServletWebServerFactory()?;
????????tomcat.setPort(8879);
????????tomcat.setContextPath("/webserver");
????????return?tomcat;
????}

2.2 通过ServletWebServerFactory类优化Tomcat

**SpringBoot1.x EmbeddedServletContainerFactory **

@Bean??
public?EmbeddedServletContainerFactory?servletContainer()?{??
????TomcatEmbeddedServletContainerFactory?tomcat?=?new?TomcatEmbeddedServletContainerFactory()?{??
????????@Override??
????????protected?void?postProcessContext(Context?context)?{??
???????????//?...??
????????}??
????};???
????return?tomcat;??
}??

SpringBoot2.X ?ServletWebServerFactory

?@Bean
????public?ServletWebServerFactory??servletContainer()?{
????????TomcatServletWebServerFactory?tomcat?=?new?TomcatServletWebServerFactory()?{
????????????@Override
????????????protected?void?postProcessContext(Context?context)?{
????????????????//?...??
????????????}
????????};
????????//tomcat.setPort(8879);
????????//tomcat.setContextPath("/webserver");
????????return?tomcat;
????}

2.2.1开启HTTPS

SpringBoot默认端口是8080的HTTP服务,通过配置可以开启HTTPS服务在application.yml文件中配置

server:
??port:?8843
??servlet:
????context-path:?/springweb
??ssl:
????key-store:?tomcat.keystore
????key-store-password:?password
????key-store-type:?JKS
????key-alias:?tomcat

tomcat.keystore生成步骤:

1):打开cmd输入命令

keytool -genkey -alias tomcat -keyalg RSA -keystore D:\software\file\java\myfirst\tomcat.keystore

图片

2)将tomcat.keystore放到**/spring-boot-part2**文件夹下

运行结果为:

图片

SpringBoot不支持通过application.yml同时支持HTTP和HTTPS

可以在application.yml设置HTTPS,HTTP在代码中添加来实现。

@Configuration
public?class?PortConfig?{
????@Bean
????public?ServletWebServerFactory??servletContainer()?{
????????TomcatServletWebServerFactory?tomcat?=?new?TomcatServletWebServerFactory()?{
????????????@Override
????????????protected?void?postProcessContext(Context?context)?{
????????????????SecurityConstraint?constraint?=?new?SecurityConstraint();
????????????????constraint.setUserConstraint("CONFIDENTIAL");
????????????????SecurityCollection?collection?=?new?SecurityCollection();
????????????????collection.addPattern("/*");
????????????????constraint.addCollection(collection);
????????????????context.addConstraint(constraint);
????????????}
????????};
????????tomcat.addAdditionalTomcatConnectors(connector());
????????return?tomcat;
????}

????@Bean
????public?Connector?connector(){
????????Connector?connector=new?Connector("org.apache.coyote.http11.Http11NioProtocol");
????????connector.setScheme("http");
????????connector.setPort(8888);
????????connector.setURIEncoding("UTF-8");
????????connector.setMaxPostSize(8192);
????????connector.setSecure(false);
????????connector.setRedirectPort(8843);
????????return?connector;
????}
}


这个时候访问http://localhost:8888/springweb就可以自动转到https://localhost:8843/springweb

2.3 SpringBoot的容器变更

  • 修改pom.xml
?<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>
????????<dependency>
????????????<groupId>org.springframework.boot</groupId>
????????????<artifactId>spring-boot-starter-jetty</artifactId>
????????</dependency>


  • config配置文件
?@Bean
????public?ServletWebServerFactory??jettyservletContainer()?{
????????JettyServletWebServerFactory?container?=?new?JettyServletWebServerFactory();
????????container.setPort(8081);
????????//?Context?Path
????????container.setContextPath("/jettboot");
????????return?container;
????}

log日志显示:

?INFO?4560?---?[???????????main]?o.s.b.web.embedded.jetty.JettyWebServer??:?Jetty?started?on?port(s)?8081?(http/1.1)?with?context?path?'/jettboot'

运行http://localhost:8081/jettboot/

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:56:41  更:2022-02-16 12:57:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:51:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码