gpt4 book ai didi

java - 如何在 Web 容器成功启动后调用 servlet 或 Controller 上的方法

转载 作者:行者123 更新时间:2023-12-04 05:47:36 25 4
gpt4 key购买 nike

我正在使用 Spring MVC 实现 RESTful Web 服务。当服务启动时,它需要注册自己,以便客户端可以找到它。我目前正在@Controller 类的@PostConstruct 方法中执行此操作。但这会在服务实际准备好接收请求之前注册服务,因为 Web 容器尚未监听 Web 请求。我更愿意在 Web 容器完成其所有初始化并监听请求后注册该服务。

我一直在寻找一个监听器和/或事件,它会在容器启动时通知我,但我没有找到。

我可能正在“过早优化”。最终的完整部署环境将需要对每个服务的一组副本进行负载平衡,并且负载平衡器必须负责确定每个实例的实际服务可用性和当前负载。

编辑 : 补充说明。

我想使用外部注册中心(具体而言,在本例中为 Zookeeper 实例)注册服务。我希望在应用程序服务器完成初始化并“开放业务”之前不要将服务添加到注册中心。当我使用@PostConstruct 时,它似乎给出了与 ServletContextListener.contextInitialized() 相同的基本顺序,我的日志输出如下所示:

INFO : MyController - Registering service foo 0.1.0 at 192.168.34.15:8080
...
May 7, 2012 3:42:49 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
May 7, 2012 3:42:49 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080

我想看到的是:
INFO: Starting Coyote HTTP/1.1 on http-8080
...
INFO : MyController - Registering service foo 0.1.0 at 192.168.34.15:8080
...

最佳答案

您要找的听众是 javax.servlet.ServletContextListener和它的 contextInitialized(..)方法(并使用 web.xml 中的 <listener><listener-class>.. 或使用 @WebListener 注册)

如果你需要一个 spring bean,你可以使用:

WebApplicationContextUtils.getRequiredWebApplicationContext(ctx).getBean(..);

关于java - 如何在 Web 容器成功启动后调用 servlet 或 Controller 上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10484186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com