5.Spring Boot 配置解析
5.1. 基础服务
- 端口:
server.port=8080
(应用启动后监听 8080 端口) - 应用名称:
spring.application.name=Chat64
(注册到服务发现等场景时的标识)
5.2. 数据库连接(MySQL)
- URL:
jdbc:mysql://localhost:3306/ai-chat
(连接本地 3306 端口的ai-chat
数据库,含时区、编码等参数) - 驱动:
com.mysql.cj.jdbc.Driver
(MySQL 8.0+ 官方驱动) - 连接池:
com.alibaba.druid.pool.DruidDataSource
(阿里 Druid 连接池,需确保依赖已引入) - 认证:
username=root
、password=weiailzc1314
(数据库登录凭据)
5.3. 视图与模板(Thymeleaf)
- 缓存:
spring.thymeleaf.cache=false
(关闭模板缓存,开发环境便于实时生效)
5.4数据库配置问题总结及解决措施笔记
5.4.1 常见问题
1. 8080 端口被占用
在配置数据库相关服务(如基于数据库的 Web 应用,常使用 8080 作为默认端口)时,系统提示 8080 端口已被占用,导致服务无法正常启动监听该端口。
2. 数据库端口不匹配
配置中指定的数据库端口(如 MySQL 默认 3306 )与实际数据库服务监听的端口不一致,使得应用无法连接到数据库。
3. 用户名密码不匹配
在连接数据库时,配置的用户名和密码与数据库中记录的不相符,从而导致身份验证失败,无法建立连接。
4. 数据库名不匹配
应用配置中指定要连接的数据库名称,在数据库服务器中不存在,或者拼写错误,造成连接时找不到对应的数据库。
5.4.2 解决措施
1. 8080 端口被占用
- 检查占用进程:
- Windows:打开命令提示符,执行
netstat -ano | findstr :8080
,找到占用 8080 端口的进程 ID ,再打开任务管理器,通过 PID 找到对应的进程并结束。
- Windows:打开命令提示符,执行
- 修改应用端口:在应用的配置文件(如 Spring Boot 的
application.properties
或application.yml
)中,修改服务端口,如将server.port=8080
改为server.port=8000
。
2. 数据库端口不匹配
- 确认数据库端口:
- MySQL:查看 MySQL 的配置文件(
my.ini
或my.cnf
,位置因系统而异),找到port
配置项,确认实际监听端口。 - 其他数据库:参考对应数据库的官方文档,查看端口配置位置。
- MySQL:查看 MySQL 的配置文件(
- 更新应用配置:在应用的数据库连接配置中,修改端口号为数据库实际监听的端口,如
jdbc:mysql://localhost:实际端口/数据库名
。
3. 数据库名不匹配
- 创建数据库:打开数据库客户端(Navicat )
- 核对拼写:检查应用配置文件中数据库名的拼写,确保与数据库中创建的名称一致。
6.MD5 加密原理与实现
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可生成 128 位(16 字节)的哈希值。其主要特点:
- 固定输出长度:无论输入数据长度如何,输出始终为 32 位十六进制字符串(16 字节二进制数据)
- 不可逆性:无法从哈希值反推原始数据
- 雪崩效应:输入的微小变化会导致哈希值大幅改变
- 不安全性:已被证明存在碰撞攻击,不建议用于密码存储
6.1代码实现分析
提供的PasswordUtil
类包含三个核心方法:
- MD5 加密方法
public static String md5(String s) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(s.getBytes("utf-8"));
return toHex(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
- 使用 Java 标准库
MessageDigest
实现 MD5 计算 - 将输入字符串转换为 UTF-8 字节数组进行处理
- 异常处理采用 RuntimeException 封装,简化调用但可能隐藏问题
- 字节数组转十六进制字符串
private static String toHex(byte[] bytes) {
final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);