如何将进度传给前端呢
业务需求,导出某一数据,但是有时候可能很多,可以设计一个进度提醒功能-----WebSocket推送导出进度。
(1) 添加依赖
<!-- pom.xml -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
(2) WebSocket配置类
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(exportProgressHandler(), "/export/progress").setAllowedOrigins("*");}@Beanpublic WebSocketHandler exportProgressHandler() {return new ExportProgressHandler();}
}
(3) WebSocket处理器(核心逻辑)
public class ExportProgressHandler extends TextWebSocketHandler {// 保存所有活跃连接(Key: ws_id, Value: Session)private static final ConcurrentHashMap<String, WebSocketSession> sessions = new ConcurrentHashMap<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) {String wsId = session.getHandshakeHeaders().getFirst("ws_id");sessions.put(wsId, session); // 建立连接时注册}// 推送进度给前端public static void sendProgress(String wsId, int progress) {WebSocketSession session = sessions.get(wsId);if (session != null && session.isOpen()) {session.sendMessage(new TextMessage("{\"progress\": " + progress + "}"));}}
}