KnowFlow Agent Day 5:Spring Boot 接入 MySQL 基础配置
Day 5 做了什么
今天主要完成了这些内容:
添加 JDBC 依赖
添加 MySQL 驱动
配置数据库连接参数
新增数据库配置类
新增数据库健康检查接口
新增数据库健康检查测试
修复 Spring Boot 自动创建数据源导致的启动问题
最终新增了一个接口:
GET /api/db/health
用于查看数据库连接状态。
为什么要接入 MySQL
KnowFlow Agent 不是一个只返回假数据的 Demo。
后面要实现:
知识库管理
文档上传
文档解析记录
文档分块
问答记录
工单记录
AI 处理日志
这些数据都需要保存。
比如:
用户上传一个文档后,系统要保存:
文档名称
所属知识库
文件类型
解析状态
向量化状态
分块数量
上传时间
用户问一个问题后,系统要保存:
问题内容
AI 回答
引用来源
模型名称
token 用量
创建时间
用户提交一个工单后,系统要保存:
工单标题
工单内容
工单状态
问题分类
优先级
AI 摘要
AI 回复建议
所以 MySQL 是后续业务功能落地的基础。
今天添加的 Maven 依赖
在 backend-spring/pom.xml 中添加了两个核心依赖。
1. spring-boot-starter-jdbc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
它的作用是:
让 Spring Boot 具备使用 JDBC 访问数据库的能力
JDBC 可以理解成 Java 连接数据库的一套标准方式。
2. mysql-connector-j
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
<scope>runtime</scope>
</dependency>
它的作用是:
让 Java 程序能真正连接 MySQL
如果没有这个驱动,Spring Boot 不知道怎么和 MySQL 通信。
数据库配置
在 application.yml 中新增了数据库相关配置:
knowflow:
database:
enabled: ${MYSQL_ENABLED:false}
type: mysql
schema: ${MYSQL_DATABASE:knowflow}
这里最重要的是:
MYSQL_ENABLED=false
也就是说,默认不启用 MySQL。
这样做的原因是:现在还不是正式接数据库阶段,如果本地没有启动 MySQL,项目也应该能正常启动。
等后续真正需要连接数据库时,再设置:
$env:MYSQL_ENABLED="true"
这样才会创建 MySQL 数据源。
为什么默认不强制连接 MySQL
这是今天一个很重要的设计点。
如果一加 MySQL 依赖,就要求本地必须启动 MySQL,那么项目会变得很难运行。
比如我只是想测试:
GET /api/health
但因为 MySQL 没启动,整个 Spring Boot 项目直接启动失败。
这就不合理。
所以 Day 5 的做法是:
默认不启用 MySQL
需要时再手动开启
这样项目更适合分阶段开发。
当前阶段:
后端可以正常启动
健康检查接口可以正常访问
数据库健康检查接口可以返回未启用状态
后续阶段:
启动 MySQL
设置 MYSQL_ENABLED=true
后端真正连接数据库
数据库配置类 DatabaseProperties
今天新增了:
DatabaseProperties
它的作用是读取数据库相关配置。
比如:
enabled
type
schema
简单理解:
DatabaseProperties = 专门保存数据库配置的 Java 类
这样代码里不用到处直接读取配置,而是统一通过这个类管理。
手动数据源配置 JdbcConfig
今天还新增了:
JdbcConfig
它的作用是:
只有 MYSQL_ENABLED=true 时,才创建 MySQL 数据源
这里用到了一个关键注解:
@ConditionalOnProperty(name = "knowflow.database.enabled", havingValue = "true")
它的意思是:
只有当 knowflow.database.enabled=true 时,这个配置才生效
这就是为什么默认情况下没有 MySQL,项目也不会启动失败。
数据库健康检查接口
Day 5 新增了接口:
GET /api/db/health
它用于查看数据库连接状态。
在默认未启用 MySQL 时,返回类似:
{
"code": 0,
"message": "ok",
"data": {
"enabled": false,
"type": "mysql",
"schema": "knowflow",
"status": "DISABLED"
}
}
这个结果说明:
数据库配置存在
但当前没有启用 MySQL 连接
以后如果启用 MySQL,并且连接成功,状态就可以变成:
UP
如果连接失败,则可以返回:
DOWN
今天踩到的 Spring Boot 坑
今天遇到了一个很真实的问题。
添加了 JDBC 依赖后,运行测试时项目启动失败,报错大概意思是:
Failed to configure a DataSource
Failed to determine a suitable driver class
原因是:
Spring Boot 发现项目里有 JDBC 依赖后,会自动尝试创建数据源。
但我们还没有在默认配置里提供完整的数据库连接信息,所以它启动失败了。
这个问题很典型。
解决方式是:关闭默认的数据源自动配置,改成由我们自己控制什么时候创建数据源。
在启动类上加了:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
意思是:
不要让 Spring Boot 自动创建 DataSource
然后我们通过自己的 JdbcConfig 控制:
只有 MYSQL_ENABLED=true 时才创建数据源
这样就解决了问题。
今天新增的代码结构
Day 5 新增了这些类:
config/DatabaseProperties.java
config/JdbcConfig.java
repository/DatabaseHealthRepository.java
service/DatabaseHealthService.java
controller/DatabaseHealthController.java
它们的职责分别是:
DatabaseProperties:读取数据库配置
JdbcConfig:决定什么时候创建 MySQL 数据源
DatabaseHealthRepository:执行 SELECT 1 检查数据库
DatabaseHealthService:封装数据库健康检查逻辑
DatabaseHealthController:提供 /api/db/health 接口
这也体现了后端常见的分层思想:
Controller 接收请求
Service 处理业务逻辑
Repository 访问数据库
Config 管理配置
测试结果
Day 5 最后运行了测试:
mvn test
测试结果:
Tests run: 3, Failures: 0, Errors: 0
BUILD SUCCESS
说明:
原来的 /api/health 没有被破坏
新的 /api/db/health 可以正常返回
项目在未启动 MySQL 时仍然可以正常运行
这点很重要,因为一个项目每次加新功能,都不能把旧功能搞坏。
更多推荐



所有评论(0)