当前位置: 移动技术网 > IT编程>开发语言>Java > 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

2019年07月19日  | 移动技术网IT编程  | 我要评论
1.介绍 在springboot的web项目中,默认采用的是内置tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方便微服务部署。

1.介绍

在springboot的web项目中,默认采用的是内置tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?

1. 方便微服务部署。
2. 方便项目启动,不需要下载tomcat或者jetty

在目前的公司已经把内置的jetty部署到了线上项目中,目前来说并无太大问题,内置就算有一些性能损失,但是通过部署多台机器,

其实也能够很轻松的解决这样的问题,内置容器之后其实是方便部署和迁移的。

1.1 优化策略

针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点

  • 线程数
  • 超时时间
  • jvm优化

针对上述的优化点来说,首先线程数是一个重点,初始线程数和最大线程数,初始线程数保障启动的时候,如果有大量用户访问,能够很稳定的接受请求, 而最大线程数量用来保证系统的稳定性,而超时时间用来保障连接数不容易被压垮,如果大批量的请求过来,延迟比较高,不容易把线程打满。这种情况在生产中是比较常见的

一旦网络不稳定,宁愿丢包也不愿意把机器压垮。

jvm优化一般来说没有太多场景,无非就是加大初始的堆,和最大限制堆,当然也不是无限增大,根据的情况进行调节

2. 快速开始

3.1 tomcat ssl

tomcat的ssl配置很简单,先通过jdk的方式生成.keystore,这种方式的证书一般来说不太被认可的,最好的方式去网上申请,阿里云和腾讯云都可以免费申请, 这种方式配置出来的https,google浏览器会提示https不受认证

keytool -genkey -alias tomcat -keyalg rsa

application-tomcat.yaml

这块对tomcat进行了一个优化配置,最大线程数是100,初始化线程是20,超时时间是5000ms

 server:
  tomcat:
  max-threads: 100
  min-spare-threads: 20
  connection-timeout: 5000
  ssl:
  key-store: classpath:.keystore
  key-store-type: jks
  key-password: qq123456
  key-alias: tomcat
  port: 8443

启动类

启动类这块加上了一个httpconnector,为了支持https访问和http访问

 @springbootapplication
 public class appapplication {
  public static void main(string args[]) {
   springapplication.run(appapplication.class, args);
  }

  @bean
  public embeddedservletcontainerfactory tomcatembeddedservletcontainerfactory() throws ioexception {
   tomcatembeddedservletcontainerfactory tomcat = new tomcatembeddedservletcontainerfactory();
   tomcat.addadditionaltomcatconnectors(httpconnector());
   return tomcat;
  }

  public connector httpconnector() throws ioexception {
   connector connector = new connector("org.apache.coyote.http11.http11nioprotocol");
   http11nioprotocol http11nioprotocol = (http11nioprotocol) connector.getprotocolhandler();
   connector.setport(8080);
   //设置最大线程数
   http11nioprotocol.setmaxthreads(100);
   //设置初始线程数 最小空闲线程数
   http11nioprotocol.setminsparethreads(20);
   //设置超时
   http11nioprotocol.setconnectiontimeout(5000);
   return connector;
  }

 }

上述就完成了https的配置,如果启动成功可以发现tomcat启动时候监听了两个端口

2016-11-21 10:53:15.247 info 42382 --- [   main] com.start.appapplication     : starting appapplication on elemebjdemacbook-pro.local with pid 42382 (/users/wangkang/code/springboot-learn/springboot-9/target/classes started by wangkang in /users/wangkang/code/springboot-learn)
2016-11-21 10:53:15.251 info 42382 --- [   main] com.start.appapplication     : no active profile set, falling back to default profiles: default
2016-11-21 10:53:15.426 info 42382 --- [   main] ationconfigembeddedwebapplicationcontext : refreshing org.springframework.boot.context.embedded.annotationconfigembeddedwebapplicationcontext@489115ef: startup date [mon nov 21 10:53:15 cst 2016]; root of context hierarchy
2016-11-21 10:53:19.164 info 42382 --- [   main] s.b.c.e.t.tomcatembeddedservletcontainer : tomcat initialized with port(s): 8443 (https) 8080 (http)
2016-11-21 10:53:19.193 info 42382 --- [   main] o.apache.catalina.core.standardservice : starting service tomcat
2016-11-21 10:53:19.194 info 42382 --- [   main] org.apache.catalina.core.standardengine : starting servlet engine: apache tomcat/8.5.5

3.2 jvm优化

这块主要不是谈如何优化,jvm优化是一个需要场景化的,没有什么太多特定参数,一般来说在server端运行都会指定如下参数
初始内存和最大内存基本会设置成一样的,具体大小根据场景设置,我们线上环境一般都是4g,因为机器是16g的,-server是一个必须要用的参数, 至于收集器这些使用默认的就可以了,除非有特定需求

java -xms4g -xmx4g -xmn768m -server -jar springboot-9-1.4.1.release.jar

4 jetty配置

pom.xml

springboot增加了一个starter针对jetty的,给pom增加一个依赖即可

  <dependency>
   <groupid>org.springframework.boot</groupid>
   <artifactid>spring-boot-starter-jetty</artifactid>
  </dependency>

下面是针对jetty的线程优化,进行了一个配置,当然不配置也是可以使用的,在线上环境中最好配置一下,进行优化

@profile("jetty")
  @bean
  public jettyembeddedservletcontainerfactory jettyembeddedservletcontainerfactory(
    jettyservercustomizer jettyservercustomizer) {
   jettyembeddedservletcontainerfactory factory = new jettyembeddedservletcontainerfactory();
   factory.addservercustomizers(jettyservercustomizer);
   return factory;
  }


  @bean
  public jettyservercustomizer jettyservercustomizer() {
   return server -> {
    // tweak the connection config used by jetty to handle incoming http
    // connections
    final queuedthreadpool threadpool = server.getbean(queuedthreadpool.class);
    threadpool.setmaxthreads(100);
    threadpool.setminthreads(20);
   };
  }

4.1 jetty https配置

application-jetty.yaml

https配置和tomcat的没有太多差别,这块是统一配置,springboot做了一个抽象化而已

server:
 connection-timeout: 5000
 ssl:
 key-store: classpath:.keystore
 key-store-type: jks
 key-password: qq123456
 key-alias: tomcat
 port: 8444

3 总结

一般来说在生产环境中不会用tomcat配置https,因为在我们的生产环境中,tomcat是一个统一的模板,只能够改线程数。一般的做法都是通过

nginx配置https,配置方式也比较简单,而且也方便重启

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网