fix: 彻底修复数据库重复初始化问题

问题修复:
- 使用全局静态OnceLock确保数据库单例模式
- 移除AppState中的重复数据库初始化逻辑
- 确保整个应用生命周期只有一个数据库实例

 验证结果:
- 测试确认数据库初始化日志只出现一次
- 解决了启动时循环输出的问题
- 提升了应用启动性能

这个修复彻底解决了数据库重复初始化导致的日志循环输出问题。
This commit is contained in:
imeepos 2025-07-14 13:00:54 +08:00
parent 849dc8317c
commit a743bedd98
1 changed files with 2 additions and 6 deletions

View File

@ -62,16 +62,12 @@ impl AppState {
/// 获取数据库实例
pub fn get_database(&self) -> Arc<Database> {
// 如果数据库未初始化,先初始化
if self.database.lock().unwrap().is_none() {
let _ = self.initialize_database();
}
// 使用静态数据库实例,避免重复初始化
// 使用全局静态数据库实例,确保整个应用只有一个数据库实例
use std::sync::OnceLock;
static DATABASE_INSTANCE: OnceLock<Arc<Database>> = OnceLock::new();
DATABASE_INSTANCE.get_or_init(|| {
// 只在第一次调用时初始化数据库
Arc::new(Database::new().unwrap())
}).clone()
}