升级 Spring Boot 3 全项目讲解 — 给项目增加聊天对话功能

学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕!


1. Spring Boot 3 升级指南

在升级 Spring Boot 3 之前,确保你的项目已经迁移到 Java 17,因为 Spring Boot 3 不再支持 Java 8 和 Java 11。接下来,我们需要更新项目的依赖配置。

1.1 更新 Maven 依赖

如果你使用的是 Maven,可以在 pom.xml 中更新 Spring Boot 的版本:

xml 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

1.2 更新 Gradle 依赖

如果你使用的是 Gradle,可以在 build.gradle 中更新 Spring Boot 的版本:

groovy 复制代码
plugins {
    id 'org.springframework.boot' version '3.0.0'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

1.3 其他依赖的更新

Spring Boot 3 中一些依赖的 groupId 发生了变化,例如 javax.* 被替换为 jakarta.*。因此,你需要检查并更新相关的依赖。例如,如果你使用了 javax.servlet,则需要将其替换为 jakarta.servlet


2. 实现聊天对话功能

为了实现实时聊天功能,我们将使用 WebSocket 技术。WebSocket 是一种全双工通信协议,允许客户端和服务器之间进行实时数据传输。

2.1 添加 WebSocket 依赖

首先,在 pom.xml 中添加 Spring Boot 对 WebSocket 的支持:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

2.2 配置 WebSocket

接下来,我们需要配置 WebSocket。创建一个配置类 WebSocketConfig,启用 WebSocket 并注册一个消息代理:

java 复制代码
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 configureMessageBroker(MessageBrokerRegistry config) {
        // 启用一个简单的内存消息代理,前缀为 /topic
        config.enableSimpleBroker("/topic");
        // 设置应用程序目的地前缀为 /app
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 注册一个 STOMP 端点,客户端将使用它连接到 WebSocket
        registry.addEndpoint("/chat").withSockJS();
    }
}

2.3 创建消息处理控制器

接下来,我们创建一个控制器来处理客户端发送的消息,并将消息广播给所有连接的客户端:

java 复制代码
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
public class ChatController {

    @MessageMapping("/sendMessage") // 处理客户端发送的消息
    @SendTo("/topic/messages") // 将消息广播到 /topic/messages
    public String sendMessage(String message) {
        return message;
    }
}

2.4 前端实现

在前端,我们可以使用 JavaScript 和 SockJS 来连接 WebSocket 并发送/接收消息。以下是一个简单的 HTML 页面示例:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Chat</title>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client/dist/sockjs.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/stompjs/lib/stomp.min.js"></script>
</head>
<body>
    <div id="chat">
        <ul id="messages"></ul>
        <input type="text" id="messageInput" placeholder="Type a message...">
        <button onclick="sendMessage()">Send</button>
    </div>

    <script>
        const socket = new SockJS('/chat');
        const stompClient = Stomp.over(socket);

        stompClient.connect({}, function (frame) {
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/messages', function (message) {
                const messages = document.getElementById('messages');
                const li = document.createElement('li');
                li.textContent = message.body;
                messages.appendChild(li);
            });
        });

        function sendMessage() {
            const messageInput = document.getElementById('messageInput');
            const message = messageInput.value;
            stompClient.send("/app/sendMessage", {}, message);
            messageInput.value = '';
        }
    </script>
</body>
</html>

2.5 运行项目

完成以上步骤后,启动 Spring Boot 项目并访问前端页面。你可以打开多个浏览器窗口,模拟多个用户进行实时聊天。


3. 功能扩展

3.1 用户身份验证

在实际应用中,通常需要为聊天功能添加用户身份验证。可以通过 Spring Security 来实现:

  1. 添加 Spring Security 依赖:
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 配置 Spring Security:
java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/chat").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin();
        return http.build();
    }
}

3.2 消息持久化

如果需要保存聊天记录,可以将消息存储到数据库中。例如,使用 Spring Data JPA 将消息保存到 MySQL:

  1. 添加 Spring Data JPA 和 MySQL 依赖:
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
  1. 创建消息实体和仓库:
java 复制代码
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import java.time.LocalDateTime;

@Entity
public class ChatMessage {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String content;
    private LocalDateTime timestamp;

    // Getters and Setters
}
java 复制代码
import org.springframework.data.jpa.repository.JpaRepository;

public interface ChatMessageRepository extends JpaRepository<ChatMessage, Long> {
}
  1. 在控制器中保存消息:
java 复制代码
@Autowired
private ChatMessageRepository chatMessageRepository;

@MessageMapping("/sendMessage")
@SendTo("/topic/messages")
public String sendMessage(String message) {
    ChatMessage chatMessage = new ChatMessage();
    chatMessage.setContent(message);
    chatMessage.setTimestamp(LocalDateTime.now());
    chatMessageRepository.save(chatMessage);
    return message;
}

4. 总结

通过升级到 Spring Boot 3,我们可以利用最新的技术和特性来增强项目的功能。本文详细介绍了如何升级 Spring Boot 3,并在此基础上实现了一个实时聊天对话功能。我们还探讨了如何扩展功能,例如用户身份验证和消息持久化。

希望这篇文章能够帮助你在 Spring Boot 3 中成功实现聊天功能。如果你有任何问题或建议,欢迎在评论区留言讨论!

相关推荐
JosieBook3 分钟前
【数据库】时序预测能力的分级进化:TimechoAI如何让每一类用户都能精准预见未来
java·开发语言·数据库
江畔柳前堤4 分钟前
github实战指南01-账号配置与 SSH 密钥
运维·人工智能·深度学习·ssh·github·pyqt·信号处理
workflower1 小时前
使用大语言模型处理用户需求
大数据·人工智能·设计模式·重构·动态规划
一生了无挂1 小时前
Java处理JSON技巧教学(从基础到高阶实战全覆盖)
java·开发语言·json
李白的天不白1 小时前
使用 SmartAdmin 进行前后端开发
java·前端
swordbob1 小时前
Spring 单例 Bean 是线程安全的吗?
java·开发语言
CodePlayer竟然被占用了2 小时前
没有生态的大模型不算前沿
人工智能
米小虾2 小时前
AI Agent 开发实战:2026年主流框架与MCP协议深度解析
人工智能·agent
米小虾2 小时前
2026年AI大模型半年报:从"参数军备"到"生态为王",谁在领跑下半场?
人工智能