SpringBoot嵌入式容器的运行参数配置及HTTPS

在SpringBoot项目中webServer默认支持的嵌入式容器是Tomcat,还可以切换到Jetty、Undertow。可以通过修改配置文件中的配置(简单)或者自定义配置类(专业化调优)方式来调整Tomcat运行参数。修改配置文件中的配置(简单)常用的参数server.port内嵌容器启动端口号,默认为8080server.servlet.context-path配置项目的访问路径server.tomcat.uri-encoding用于解码URI的字符编码server.error.path配置当前项目出错时跳转去的页面server.servlet.session.timeout配置session失效时间,默认30分钟server.tomcat.basedir配置Tomcat运行日志和临时文件的目录。若不配置则默认使用系统的临时目录。我们可以参考一下官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.server其中编号11就是我们需要的ServerProperties。tomcat性能优化及常用核心参数请求到达tomcat时首先经过连接器,在请求被接收之前会维护一个接收队列,这个队列的最大长度就是server.tomcat.max-connections,默认接受的最大请求连接数为8192,监听连接请求并生成一个Socket任务提交到线程池去处理。这时Executor中的线程全都被占用,server.tomcat.accept-count可以设置等待队列的大小,默认值为100。server.tomcat.threads.max为最大的工作线程池数量,不是越大越好,默认值为200。server.tomcat.threads.min-spare是在应用空闲的时候保留最小的工作线程池数量,避免临时创建线程浪费时间,默认值为10。配置文件的编写我们已经做过很多了,.yml文件的格式大致如下:server:  port: 8080  tomcat:    uri-encoding: UTF-81234复制代码类型:[java]自定义配置类(专业化调优)在config文件夹下创建TomcatCustomizerConfig.java文件:package com.javafamily.familydemo.config;import org.apache.catalina.connector.Connector;import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class TomcatCustomizerConfig {    @Bean    // 添加定制器    public ConfigurableServletWebServerFactory configurableServletWebServerFactory() {        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();        factory.addConnectorCustomizers(new MyTomcatConnectionCustomizer());        return factory;    }    static class MyTomcatConnectionCustomizer implements TomcatConnectorCustomizer {        public MyTomcatConnectionCustomizer() {        }        @Override        public void customize(Connector connector) {            connector.setPort(Integer.parseInt("8080"));            connector.setProperty("maxConnections", "8192");        }    }}1234567891011121314151617181920212223242526272829303132复制代码类型:[java]以上这段代码核心的配置工厂是ConfigurableServletWebServerFactory,默认使用TomcatServletWebServerFactory来创建TomcatWebServer的抽象web服务的抽象工厂类。MyTomcatConnectionCustomizer是我们编写的针对连接器配置自定义的实现类,并将其实例化。可定制的内容更多,使用更灵活。配置HTTPSHTTPS是HTTP协议的安全版本,HTTPS在HTTP的基础下加入SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。生成自签名证书以mac系统为例,输入命令行:keytool -genkeypair -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore JavaFamily.p12 -validity 36501复制代码类型:[java]-genkeypair创建一个新的密钥-aliaskeystore的别名-keyalg表示使用的加密算法是RSA-keysize密钥长度-keystore密钥存放位置-validity密钥有效时长创建好JavaFamily.p12后,将其拖进src/main/resources/config下。配置application.yml文件:server:  port: 8888  ssl:    key-store: classpath:config/JavaFamily.p12    key-store-password: 123456    key-store-type: PKCS12123456复制代码类型:[java]配置完成后启动程序。访问http://localhost:8888/hello:再访问https://localhost:8888/hello:首次访问会被警告不安全,在当前页面用键盘输入thisisunsafe,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页。HTTP请求重定向为HTTPS当我们进行了一系列的配置之后,HTTPS可以进行正常访问,但是HTTP却出现了报错。这样对于访问HTTP的用户是很不友好的,所以我们要将HTTP请求重定向到HTTPS。这就需要用编码的方式来配置Tomcat。首先在application.yml中添加一个端口:server:  port: 8888  httpPort: 80  ssl:    key-store: classpath:config/JavaFamily.p12    key-store-password: 123456    key-store-type: PKCS121234567复制代码类型:[java]再改写之前创建的TomcatCustomizerConfig.java文件:package com.javafamily.familydemo.config;import org.apache.catalina.Context;import org.apache.catalina.connector.Connector;import org.apache.tomcat.util.descriptor.web.SecurityCollection;import org.apache.tomcat.util.descriptor.web.SecurityConstraint;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class TomcatCustomizerConfig {    @Value("${server.httpPort}")    int httpPort;    @Value("${server.port}")    int httpsPort;    @Bean    public ConfigurableServletWebServerFactory configurableServletWebServerFactory() {        TomcatServletWebServerFactory factory = 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);            }        };        factory.addAdditionalTomcatConnectors(connector());        return factory;    }    public Connector connector() {        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");        connector.setScheme("http");        // 监听http端口号        connector.setPort(httpPort);        // 不安全        connector.setSecure(false);        // 监听到http的端口号后转向到的https的端口号        connector.setRedirectPort(httpsPort);        return connector;    }}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152复制代码类型:[java]用HTTP协议的80端口访问会自动跳转到HTTPS协议的8888端口。这时当我们访问http://localhost:80/hello时会自动跳转到https://localhost:8888/hello。

(0)

相关推荐

  • SpringBoot报错 Error parsing HTTP request header

    使用SpringToolSuite4执行Stringboot插入操作时,报请求头错误,具体信息如下 Error parsing HTTP request header Note: further oc ...

  • 在启用GPU的Docker容器中运行AI模型

    容器技术(例如Docker)极大地简化了依赖性管理和软件的可移植性.在本系列文章中,我们将探讨Docker在机器学习(ML)场景中的用法. 本系列假定您熟悉ML,一般的容器化,尤其是Docker.欢迎 ...

  • SpringBoot 接口同时接收MultipartFile参数和结构体参数

    前言: 近期接手一个需求,需求转成代码实现就是需要在一个接口实现很多参数传递的同时加上文件上传,考虑到参数比较多,参数封装成body上传,文件用单独的 MultipartFile 接收:前端死活对接不 ...

  • 【经验总结】老司机谈汽轮机组运行参数的影响因素

      一. 进汽压力 进汽压力升高的影响: ① 汽压升高,汽温不变,汽机低压段湿度增加,不但使汽机的湿汽损失增加,降低汽机的相对内效率,并且增加了几级叶片的侵蚀作用,为了保证安全,一般要求排汽干度大于8 ...

  • 小米11青春版和红米note9pro哪个好 参数配置对比评测

    小米11青春版和红米note9pro都是中低端定位的手机,那么在这两款手机中小伙伴们到底是要如何选择呢?现在就有来自迷你网小编来为大家介绍一下吧. 一.参数对比 二.具体分析 手机屏幕 小米11青春版 ...

  • 红魔6r手机参数配置怎么样

    红魔6r在5月底正式发布了,这款以游戏性能为主的游戏手机也越来越像主流手机了,那么红魔6r参数配置怎么样呢. 红魔6R提供幻影黑.流光银.星耀白三种配色,笔者手中这款为幻影黑. 红魔6R采用6.67英 ...

  • iqoo neo5和红米k40哪个好性价比高 参数配置性能对比

    iQOO Neo5和Redmi K40都是骁龙870处理器,价格也差不多,都是主打性价比的机型,还是要通过具体参数来判断各有优劣,neo5和k40哪个更值得买呢?下面带来全面介绍. neo5和k40哪 ...

  • 格力商用多联机在线控器上怎么查询内外机运行参数?

    长按"功能"键5 秒进入查询,在"n7"状态下,定时区域不显示, 短按"模式"键,进入外机参数查询,温度区第一位闪烁(外机模块号显示位),按 ...

  • 小米11青春版和vivos9哪个好 参数配置对比性能谁更强

    小编为大家带来小米11青春版和vivos9的对比,那么这两款手机哪款更值得入手?在手机的参数方面哪款更高?小编为大家带来最新的手机资讯,快来看看吧. 一.参数对比 二.性能分析 1.屏幕对比 这两款手 ...

  • 三星GalaxyF525G参数配置如何

    大家应该都听说了最近三星GalaxyF525G马上就上线与大家见面了,GalaxyF525G参数配置如何,相信不少用户都非常关心的,下面小编就讲解了三星GalaxyF525G参数配置介绍,来下文看一看 ...