首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止spring boot How应用程序在其仍在启动时接受http请求?

如何防止spring boot How应用程序在其仍在启动时接受http请求?
EN

Stack Overflow用户
提问于 2020-09-07 22:26:29
回答 1查看 173关注 0票数 1

我有一个带有angular前端的spring boot with应用程序。当我使用angular应用程序发送请求,而When应用程序仍在启动时,可能会发生When应用程序可以接受该请求并尝试处理它的情况。我相信只要WebSecurityConfigurerAdapter扩展类被初始化,应用程序就能够接收请求。

当其余类尚未完全初始化时,这会导致问题。例如,当我试图注销一个仍然在前端登录的用户,而yet应用程序还在启动时,可能会因为找不到数据库表user而导致SQLException。

在初始化最后一个类(用@SpringBootApplication注释的那个类)之前,如何防止应用程序接受请求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 05:19:54

根据@Fullslack.dev的提示,我提出了以下解决方案。

代码语言:javascript
复制
@WebFilter(urlPatterns = {"/*"})
public class MyFilter implements Filter, ApplicationListener<ApplicationReadyEvent> {

    private boolean webApplicationReadyToAcceptRequests = false;

    @Override 
    public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
        webApplicationReadyToAcceptRequests = true;
    }
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
            if(!webApplicationReadyToAcceptRequests) {
                httpServletResponse.setHeader("Retry-After","35");
                httpServletResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "The server is currently starting up. Please try again in a moment.");
                return;
            }
            else
                filterChain.doFilter(servletRequest, servletResponse);
            }
    }

}

这是一个过滤器类,其中每个请求都必须首先通过,然后才能提供给@Controller和/或@Service注释类。如果变量webApplicationReadyToAcceptRequests仍然为假,那么过滤器将不会将请求传递到下游,而是会发送一个错误消息响应,其中包含httpstatus503(服务不可用)。

确保您至少使用以下代码注释了一个@Configuration配置类:

代码语言:javascript
复制
@ComponentScan(basePackages={ "FolderWhereMyFilterIsLocated"})

这将确保spring知道过滤器的存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63779539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档