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

相关推荐
小登ai学习2 分钟前
框架部分面试题学习
java·学习·面试
Archy_Wang_16 分钟前
ASP.NET Core 中使用 Cookie 身份验证
后端·asp.net
董董灿是个攻城狮16 分钟前
010:传统计算机视觉之大津算法初探
人工智能·计算机视觉·cnn
new66699924 分钟前
Java实现命令模式
java·命令模式
松岛的枫叶32 分钟前
springBoot整合ELK Windowsb版本 (elasticsearch+logstash+kibana)
spring boot·elk·elasticsearch·kibana·logstash
web_1323342143637 分钟前
简单的spring boot tomcat版本升级
spring boot·后端·tomcat
Stealmoon_91 小时前
快速、简单的2D-6D位姿估计:Gen6D算法复现 (pytorch 1.12.1 + cu113)
人工智能·pytorch·算法
whaosoft-1431 小时前
51c~Pytorch~合集4
人工智能
写代码的熊萌新1 小时前
JAVA2-类与对象编程(1)
java·开发语言
爱喝热水的呀哈喽1 小时前
pytorch模型的保存失敗しましたが、
人工智能·pytorch·python