Vaadin UI就绪事件 [英] Vaadin ui ready event

查看:25
本文介绍了Vaadin UI就绪事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在云环境中,我需要能够找出Spring boot vaadin服务何时为用户连接做好了准备。 我试着呼叫/Actuator/Health,但在avadin准备好之前,服务就已经开始了…… 是否有人面临同样的问题并找到解决方案?

为了清楚起见,我的问题更多的是在负载平衡级别。我需要找到一种方法来告诉负载均衡器(我正在使用粘滞会话),新产生的vaadin服务已经准备好接收用户了……这就是我使用/Actuator/Health的地方,但是在vaadin准备好之前,服务已经启动。

推荐答案

我们的应用程序(使用应用程序负载均衡器部署在aws上)基于Spring Boot和Vaadin14。我们一直使用ServletFilter来指示负载均衡器引导流量:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class HealthCheckFilter implements Filter {

    public static final String HEALTH_CHECK_PATH = "/healthcheck";
    private boolean vaadinIsInitialized = false;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        if (request.getRequestURI().endsWith(HEALTH_CHECK_PATH) && vaadinIsInitialized) {                
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @EventListener({ContextRefreshedEvent.class})
    public void contextRefreshedEvent() {
        // invoked after Spring finishes loading the application context, which is after
        // Vaadin and the embedded application server has started
        vaadinIsInitialized = true;
    }
}

至少有两个有趣的事件作为应用程序初始化的一部分发生,可用于指示应用程序已准备好为请求提供服务。

  1. ServiceInitEvent-它发布到实现VaadinServiceInitListener的任何Spring bean(如果您没有使用Spring,IIRC,您可以注册此事件)。根据文档,在初始化VaadinService时发布。这意味着它发生在Vaadin完全初始化之前。在一个普通的应用程序中,我观察到在应用程序准备接收请求前几毫秒就发生了这种情况。
  2. (如果您在Spring中使用Vaadin)ContextRefreshedEvent-这发生在Vaadin和Spring都完全初始化之后。在此事件发生时,应用程序已准备好为Vaadin请求提供服务-因此,它是向负载平衡器发出信号的一个很好的候选对象。

这篇关于Vaadin UI就绪事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆