准备工作

JDK 8U152

windows及linux版本下载地址:链接 下载后安装

ALPN alpn-boot-8.1.11.v20170118.jar

alpn-boot-8.1.11.v20170118.jar

项目配置

pom.xml依赖配置

  1. <!--springboot排除tomcat依赖-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-tomcat</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!--引入undertow-->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-undertow</artifactId>
  16. </dependency>

application.yml

  1. server:
  2. port: 8880
  3. http:
  4. port: 80
  5. undertow:
  6. url-charset: utf-8
  7. http2:
  8. enabled: true

配置类

    /**
     * http服务端口
     */
    @Value("${server.http.port}")
    private Integer httpPort;
    @Value("${server.http2.enabled}")
    public boolean http2State;
    /**
     * https服务端口
     */
    @Value("${server.port}")
    private Integer httpsPort;
    @Value("${server.http.exchange-to-https:true}")
    private Boolean httpExchangeHttps;

    @Bean
    public ServletWebServerFactory undertowFactory() {
        UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory();
        undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> {
            builder.addHttpListener(httpPort, "0.0.0.0")
                    .setServerOption(UndertowOptions.ENABLE_HTTP2, http2State)
                    .setServerOption(UndertowOptions.HTTP2_SETTINGS_ENABLE_PUSH, true);
        });
        if(httpExchangeHttps){
            undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
                // 开启HTTP自动跳转至HTTPS
                deploymentInfo.addSecurityConstraint(new SecurityConstraint()
                        .addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
                        .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
                        .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
                        .setConfidentialPortManager(exchange -> httpsPort);
            });
        }else{
            log.warn("http转https已经被关闭,当前允许从http访问");
        }
        return undertowFactory;
    }

启动服务

java版本确认

# 确认java版本为152版本
java -version

启动java服务

java -Xbootclasspath/p:ALPN的jar包路径 -jar app.jar

idea开发相关配置

1. 变更系统环境变量中JAVA_HOME的目标路径为152版本

2. idea版本变更

修改项目设置

image.png

将项目sdk切换为152版本
image.png
将模块下所有模块依次变更为152版本
image.png
打开setting,将maven的jdk设定为152版本
image.png
服务配置变更,点击edit configurations菜单
image.png
在vm options输入框中,输入

-Xbootclasspath/p:ALPN的jar包路径

image.png