SpringBoot入門之內嵌Tomcat配置


  spring boot默認web程序啟用tomcat內嵌容器tomcat,監聽8080端口,servletPath默認為 / 。需要用到的就是端口、上下文路徑的修改,在spring boot中其修改方法極其簡單,實例如下:

server.port=8088
server.context-path=/test

啟動程序,日志如下:

2018-03-08 19:57:58.824  INFO 12046 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8088 (http)

可以看出其監聽端口8088

自定義tomcat  

  在實際的項目中簡單的配置tomcat端口肯定無法滿足大家的需求,因此需要自定義tomcat配置信息來靈活的控制tomcat。下面的實例定義了tomcat的默認編碼格式

package com.ysl.conf;

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;

import java.nio.charset.Charset;

/**
 * tomcat配置
 */
@Configuration
public class TomcatConfig {

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

  構建EmbeddedServletContainerFactory的bean,獲取到TomcatEmbeddedServletContainerFactory實例以后可以對tomcat進行設置,例如這里設置編碼為UTF-8

SSL配置

生成證書

keytool -genkey -alias springboot -keyalg RSA -keystore /Users/ysl/software/ca1/keystore
設置密碼123456

修改tomcat的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"/>

啟動tomcat,訪問https://localhost:8443

spring boot 內嵌tomcat ssl

配置資源文件:

server.port=8443
server.ssl.enabled=true
server.ssl.keyAlias=springboot
server.ssl.keyPassword=123456
server.ssl.keyStore=/Users/ysl/software/ca1/keystore

多端口監聽配置

前面啟動ssl后只能走https,不能通過http進行訪問,如果要監聽多端口,可采用編碼形式實現。

1.注銷前面ssl配置,設置配置 server.port=8088

2.修改TomcatConfig.java

package com.ysl.conf;

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;

import java.io.File;
import java.nio.charset.Charset;

/**
 * tomcat配置
 */
@Configuration
public class TomcatConfig {

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

    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File truststore = new File("/Users/ysl/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);
        }
    }
}

通過addAdditionalTomcatConnectors方法添加多個監聽連接;此時可以通過http 8088端口,https 8443端口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM