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

server/2025/1/12 3:04:49/

学会这款 🔥全新设计的 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 的版本:

<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 的版本:

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 的支持:

<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 {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {// 启用一个简单的内存消息代理,前缀为 /topicconfig.enableSimpleBroker("/topic");// 设置应用程序目的地前缀为 /appconfig.setApplicationDestinationPrefixes("/app");}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {// 注册一个 STOMP 端点,客户端将使用它连接到 WebSocketregistry.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/messagespublic String sendMessage(String message) {return message;}
}

2.4 前端实现

在前端,我们可以使用 JavaScript 和 SockJS 来连接 WebSocket 并发送/接收消息。以下是一个简单的 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="javascript language-javascript">sendMessage()">Send</button></div><script>javascript">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 依赖:
<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 {@Beanpublic 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 依赖:
<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 中成功实现聊天功能。如果你有任何问题或建议,欢迎在评论区留言讨论!


http://www.ppmy.cn/server/157649.html

相关文章

WebSocket 实现指南

WebSocket 实现指南 目录 1. 依赖安装 1.1 安装必要的包 # 安装 gorilla/websocket go get github.com/gorilla/websocket# 安装 gin 框架 go get github.com/gin-gonic/gin1.2 更新 go.mod require (github.com/gin-gonic/gin v1.9.1github.com/gorilla/websocket v1.5.3…

TP8 前后端分离开发验证码总是验证不正确问题

原因&#xff1a; 单独访问(不是前后端分离)每次前端生成验证码&#xff0c;都会带PHPSESSID值传递给后端&#xff0c;所以正常 前后端分离&#xff1a;前端每次不带PHPSESSID值传递给后端&#xff0c;所以后端每次都给一个新身份PHPSESSID值前端&#xff0c;造成前端每次PHPS…

《通过财报看企业》

“借贷关系”“净资产收益率”“财务报表”、净利润、盈利能力、现金流 第1章 净利润&#xff1a;决定一家公司的股价能涨多高 企业经营&#xff1a;存货周转率 企业市值&#xff1a;市值净利润市盈率 龙头企业&#xff1a;行业内收入规模最大、盈利能力最强&#xff0c;…

【面试题】技术场景 6、Java 生产环境 bug 排查

生产环境 bug 排查思路 分析日志&#xff1a;首先通过分析日志查看是否存在错误信息&#xff0c;利用之前讲过的 elk 及查看日志的命令缩小查找错误范围&#xff0c;方便定位问题。远程 debug 适用环境&#xff1a;一般公司正式生产环境不允许远程 debug&#xff0c;多在测试环…

需求:h5和小程序预览图片需要有当前第几张标识

1.小程序直接使用api&#xff1a;uni.previewImage 2.h5使用轮播图写一个组件 <template><view class"custom-image-preview" v-if"visible"><view class"overlay"></view><swiper class"swiper" :curre…

EG2133 (三相独立半桥驱动芯片)的功能介绍

目录 概述 1 功能介绍 1.1 基本介绍 1.2 主要特性 2 芯片硬件特性 2.1 引脚定义 2.2 芯片内部实现框图 2.3 经典应用电路 3 应用设计要求 3.1 VCC电压 3.2 输入逻辑信号要求和输出驱动器特性 3.3 输入信号和输出信号逻辑真值表 4 电气特性 概述 本文主要介绍EG2133 …

AI技术变革与开源生态的双重视角:从OpenAI o1模型到开源AI发展困境

人工智能仍然是技术领域最大的故事&#xff0c;尤其是以OpenAI的o1模型发布为标志的转变 在讨论“人工智能仍然是技术领域最大的故事&#xff0c;尤其是以OpenAI的o1模型发布为标志的转变”这一观点时&#xff0c;我们可以从几个方面进行深入分析&#xff1a; 1. AI的持续主导…

怎么管理电脑usb接口,分享四种USB端口管理方法

怎么管理电脑usb接口&#xff0c;分享四种USB端口管理方法 USB接口作为电脑重要的外部接口&#xff0c;方便了数据传输和设备连接。 然而&#xff0c;不加管理的USB接口也可能带来安全隐患&#xff0c;例如数据泄露、病毒传播等。 因此&#xff0c;有效管理电脑USB接口至关重…