[英]Keep Spring Boot application alive with websocket connection
我的 Spring 引导应用程序非常小,并且有一项工作:通过打开与第三方网站的 websocket 连接并侦听消息来充当客户端。
问题是,在我的 javax.websocket.Endpoint 实现已初始化并创建连接后,我的 Spring 启动应用程序将关闭。
我会认为任何打开的 websocket 连接都会让我的应用程序保持正常运行?
我不需要嵌入式 servlet 容器,因此我在 application.yaml 中专门设置了web-environment: false
。
有没有办法在不添加我永远不会使用的 servlet 容器的情况下解决这个问题?
我通过使用OkHttpClient并在我的@Configuration
使用@PostConstruct
对其进行了初始化来解决此问题。 我用@Component
注释了侦听器,它现在可以保持活动状态,而无需嵌入式servlet容器。
@PostConstruct
void handleRequest() {
Runnable runnable = () -> {
while (true) {
try {
JSONObject requestBody = getRequestBodyFromInput(serverSocket.accept());
requestHandler.handleRequest(requestBody);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
new Thread(runnable).start();
}
我在 while 套接字上启动了一个新线程,它将继续侦听,并且我不会通过在 while 循环中循环它来让该新线程死亡。
您只是可以永远循环下去。
while (true) {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.