• 关于spring boot中 EmbeddedServletContainerCustomizer


    EmbeddedServletContainerCustomizer(嵌入式servlet容器定制)这个在spring boot2.X的版本中就不再提供支持了貌似2.0版本还能用 ,用来提供对异常的处理,配置修改servlet。在支持EmbeddedServletContainerCustomizer的springboot版本中我们可以类似这样来配置异常处理和跳转
    package com.dabai.springtest.error;
    
    import org.springframework.boot.web.server.ErrorPage;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.HttpStatus;
    
    @Configuration
    public class ErrorPageConfig {
    
    
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer() {
            return new EmbeddedServletContainerCustomizer() {
                @Override
                public void customize(ConfigurableEmbeddedServletContainer container) {
                    ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401");
                    ErrorPage error405Page = new ErrorPage(HttpStatus.METHOD_NOT_ALLOWED, "/405");
                    ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404");
                    ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500");
    
                    container.addErrorPages(error401Page,error405Page, error404Page, error500Page);
                }
            };
        }
    }

    在不支持的情况下需要这样

    package com.dabai.springtest.error;
    
    import org.springframework.boot.web.server.ErrorPage;
    import org.springframework.boot.web.server.ErrorPageRegistrar;
    import org.springframework.boot.web.server.ErrorPageRegistry;
    import org.springframework.http.HttpStatus;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ErrorPageConfig implements ErrorPageRegistrar {
    
    
        @Override
        public void registerErrorPages(ErrorPageRegistry registry) {
            ErrorPage error400Page=new ErrorPage(HttpStatus.BAD_REQUEST,"/error400" );
            ErrorPage error401Page=new ErrorPage(HttpStatus.UNAUTHORIZED,"/error401");
            ErrorPage error500Page=new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,"/error500");
            registry.addErrorPages(error400Page,error401Page,error500Page);
        }
        
    }

    其中

    ErrorPageRegistrar接口:
    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package org.springframework.boot.web.server;
    
    @FunctionalInterface
    public interface ErrorPageRegistrar {
        void registerErrorPages(ErrorPageRegistry registry);
    }
    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package org.springframework.boot.web.server;
    
    @FunctionalInterface
    public interface ErrorPageRegistry {
        void addErrorPages(ErrorPage... errorPages);
    }

     如果是在不支持EmbeddedServletContainerCustomizer的SpringBoot版本中希望制定容器的一些特性可以使用接口:WebServerFactoryCustomizer

    package com.dabai.bishe.config;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.web.server.WebServerFactoryCustomizer;
    import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
    import org.springframework.context.annotation.Configuration;
    
    import java.io.File;
    
    //@Configuration
    public class WebConfig {
        private static final Logger logger = LoggerFactory.getLogger(WebConfig.class);
    
        @Configuration
        public static class FrontEnd implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
            @Value("${web.front.baseDir}")
            private File baseDir;
    
            @Override
            public void customize(ConfigurableServletWebServerFactory factory) {
                if (!baseDir.exists()) {
                    if (!baseDir.mkdir()) {
                        logger.info("create web.front base path:" + baseDir + " failed!already exists!");
                    } else {
                        logger.info("create web.front base path:" + baseDir + " success!");
                    }
                }
                factory.setDocumentRoot(baseDir);
            }
        }
    }
    

      

  • 相关阅读:
    解决Cannot change version of project facet Dynamic web module to 3.0
    mysql 存储过程
    查看建表语句
    mysql query cache 查询缓存
    数据库连接池
    JDBC Statement PrepareStatement
    mysql 改变表结构 alter
    maven 获取pom.xml的依赖---即仓库搜索服务
    windows常用快捷键
    oracle 的数据完整性
  • 原文地址:https://www.cnblogs.com/notably/p/10710165.html
Copyright © 2020-2023  润新知