在 Spring Boot 中实现前端调用接口执行任务并通过 WebSocket 实时推送任务状态,可以按照以下步骤操作:
1. 添加依赖
在 pom.xml
中添加 WebSocket 和 JSON 支持依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2. 配置 WebSocket
创建一个 WebSocket 配置类,启用 STOMP 协议和消息代理:
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// 前端连接端点
registry.addEndpoint("/ws")
.setAllowedOrigins("*") // 允许跨域
.withSockJS(); // 支持 SockJS
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// 启用内存消息代理,前缀为 /topic 的消息会发送到代理
registry.enableSimpleBroker("/topic");
// 客户端发送消息的前缀(可选,若需双向通信)
registry.setApplicationDestinationPrefixes("/app");
}
}
3. 定义任务状态消息对象
创建一个 DTO 类表示任务状态消息: