溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

springboot之內(nèi)嵌容器tomcat配置的示例分析

發(fā)布時(shí)間:2021-08-20 12:45:14 來(lái)源:億速云 閱讀:142 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了springboot之內(nèi)嵌容器tomcat配置的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

默認(rèn)容器

spring boot默認(rèn)web程序啟用tomcat內(nèi)嵌容器tomcat,監(jiān)聽8080端口,servletPath默認(rèn)為 / 通過(guò)需要用到的就是端口、上下文路徑的修改,在spring boot中其修改方法及其簡(jiǎn)單;

在資源文件中配置:  

server.port=9090 
server.contextPath=/lkl

啟動(dòng)spring boot

2015-10-04 00:06:55.768 INFO 609 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-10-04 00:06:55.844 INFO 609 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup
2015-10-04 00:06:55.928 INFO 609 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 9090 (http)
2015-10-04 00:06:55.930 INFO 609 --- [      main] com.lkl.springboot.Application    : Started Application in 3.906 seconds (JVM running for 4.184)

可以看出其監(jiān)聽端口9090,執(zhí)行 http://localhost:9090/lkl/springboot/liaokailin 成功訪問(wèn)

自定義tomcat

在實(shí)際的項(xiàng)目中簡(jiǎn)單的配置tomcat端口肯定無(wú)法滿足大家的需求,因此需要自定義tomcat配置信息來(lái)靈活的控制tomcat。

以定義默認(rèn)編碼為例

package com.lkl.springboot.container.tomcat;

import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * tomcat 配置
 * @author liaokailin
 * @version $Id: TomcatConfig.java, v 0.1 2015年10月4日 上午12:11:47 liaokailin Exp $
 */
@Configuration
public class TomcatConfig {

  @Bean
  public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.setUriEncoding("UTF-8");
    return tomcat;
  }

}

構(gòu)建EmbeddedServletContainerFactory的bean,獲取到TomcatEmbeddedServletContainerFactory實(shí)例以后可以對(duì)tomcat進(jìn)行設(shè)置,例如這里設(shè)置編碼為UTF-8

SSL配置

生成證書

keytool -genkey -alias springboot -keyalg RSA -keystore /Users/liaokailin/software/ca1/keystore
設(shè)置密碼123456

tomcat中驗(yàn)證證書是否正確

修改tomcat/conf/server.xml文件

<Connector
       protocol="org.apache.coyote.http11.Http11NioProtocol"
       port="8443" maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       keystoreFile="/Users/liaokailin/software/ca1/keystore" keystorePass="123456"
       clientAuth="false" sslProtocol="TLS"/>

啟動(dòng)tomcat ,訪問(wèn) http://localhost:8443

spring boot 內(nèi)嵌tomcat ssl

配置資源文件

server.port=8443
server.ssl.enabled=true
server.ssl.keyAlias=springboot
server.ssl.keyPassword=123456
server.ssl.keyStore=/Users/liaokailin/software/ca1/keystore
  1. server.ssl.enabled 啟動(dòng)tomcat ssl配置

  2. server.ssl.keyAlias 別名

  3. server.ssl.keyPassword 密碼

  4. server.ssl.keyStore 位置

啟動(dòng) spring boot

訪問(wèn)https://localhost:8443/springboot/helloworld

多端口監(jiān)聽配置

前面啟動(dòng)ssl后只能走h(yuǎn)ttps,不能通過(guò)http進(jìn)行訪問(wèn),如果要監(jiān)聽多端口,可采用編碼形式實(shí)現(xiàn)。

1.注銷前面ssl配置,設(shè)置配置 server.port=9090

2.修改TomcatConfig.java

package com.lkl.springboot.container.tomcat;
import java.io.File;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * tomcat 配置
 * @author liaokailin
 * @version $Id: TomcatConfig.java, v 0.1 2015年10月4日 上午12:11:47 liaokailin Exp $
 */
@Configuration
public class TomcatConfig {

  @Bean
  public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.setUriEncoding("UTF-8");
    tomcat.addAdditionalTomcatConnectors(createSslConnector());
    return tomcat;
  }

  private Connector createSslConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
    try {
      File truststore = new File("/Users/liaokailin/software/ca1/keystore");
      connector.setScheme("https");
      protocol.setSSLEnabled(true);
      connector.setSecure(true);
      connector.setPort(8443);
      protocol.setKeystoreFile(truststore.getAbsolutePath());
      protocol.setKeystorePass("123456");
      protocol.setKeyAlias("springboot");
      return connector;
    } catch (Exception ex) {
      throw new IllegalStateException("cant access keystore: [" + "keystore" + "] ", ex);
    }
  }
}

通過(guò)addAdditionalTomcatConnectors方法添加多個(gè)監(jiān)聽連接;此時(shí)可以通過(guò)http 9090端口,https 8443端口。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“springboot之內(nèi)嵌容器tomcat配置的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI