Vaadin UI就绪事件 [英] Vaadin ui ready event
本文介绍了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;
}
}
至少有两个有趣的事件作为应用程序初始化的一部分发生,可用于指示应用程序已准备好为请求提供服务。
- ServiceInitEvent-它发布到实现VaadinServiceInitListener的任何Spring bean(如果您没有使用Spring,IIRC,您可以注册此事件)。根据文档,在初始化VaadinService时发布。这意味着它发生在Vaadin完全初始化之前。在一个普通的应用程序中,我观察到在应用程序准备接收请求前几毫秒就发生了这种情况。
- (如果您在Spring中使用Vaadin)ContextRefreshedEvent-这发生在Vaadin和Spring都完全初始化之后。在此事件发生时,应用程序已准备好为Vaadin请求提供服务-因此,它是向负载平衡器发出信号的一个很好的候选对象。
这篇关于Vaadin UI就绪事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文