升级 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 中成功实现聊天功能。如果你有任何问题或建议,欢迎在评论区留言讨论!

相关推荐
qinyia1 小时前
Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
服务器·人工智能·ssh
我真的是大笨蛋3 小时前
K8S-Pod(下)
java·笔记·云原生·容器·kubernetes
昨日之日20063 小时前
Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
人工智能·音视频
碳水加碳水3 小时前
Java代码审计实战:XML外部实体注入(XXE)深度解析
java·安全·web安全·代码审计
努力也学不会java4 小时前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿5 小时前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
学亮编程手记5 小时前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
SEO_juper6 小时前
大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
人工智能·语言模型·自然语言处理·chatgpt·llm·seo·数字营销
Haven-6 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋6 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构