我想用Spring Boot创建一个RESTful Web应用程序,该应用程序将不断从websocket连接中接收信息,对其进行聚合并通过其REST API提供这些聚合数据。
因此,我需要打开并维护WebSocket连接,同时还要在SpringApplication.run()
函数中运行main()
。
@Scheduled
批注似乎仅在特定时间或间隔运行任务,但似乎没有办法始终在后台运行某些东西。
实现我所描述的内容的明智方法是什么?
答案 0 :(得分:0)
仅在应用程序启动时将您的应用程序连接到套接字
@SpringBootApplication
public class SpringBootConsoleApplication
implements CommandLineRunner {
private static Logger LOG = LoggerFactory
.getLogger(SpringBootConsoleApplication.class);
public static void main(String[] args) {
LOG.info("STARTING THE APPLICATION");
SpringApplication.run(SpringBootConsoleApplication.class, args);
LOG.info("APPLICATION FINISHED");
}
@Override
public void run(String... args) {
//Connect to socket and cache the results if you want to
}}
在应用程序上下文加载后,Spring Boot将自动调用实现此接口的所有bean的run方法
有关命令行运行程序的更多信息,您可以访问is/2
答案 1 :(得分:0)
为什么不使用Spring提供的WebSocketClient
?连接后,每次收到新的Websocket框架时,您都会通过回调方法收到通知。
您可以在https://www.baeldung.com/websockets-api-java-spring-client
处查看示例只需将其放在带有@Component
或@Service
注释的类中,即可通过构造函数启动websocket会话。
由于您的服务器始终处于运行状态,因此无需执行new Scanner(System.in).nextLine()
。