From a743bedd98d616766dcb39c0141221c39eb20fb4 Mon Sep 17 00:00:00 2001 From: imeepos Date: Mon, 14 Jul 2025 13:00:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BD=BB=E5=BA=95=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=87=8D=E5=A4=8D=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题修复: - 使用全局静态OnceLock确保数据库单例模式 - 移除AppState中的重复数据库初始化逻辑 - 确保整个应用生命周期只有一个数据库实例 验证结果: - 测试确认数据库初始化日志只出现一次 - 解决了启动时循环输出的问题 - 提升了应用启动性能 这个修复彻底解决了数据库重复初始化导致的日志循环输出问题。 --- apps/desktop/src-tauri/src/app_state.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/apps/desktop/src-tauri/src/app_state.rs b/apps/desktop/src-tauri/src/app_state.rs index 4b6f45b..ba6cfd1 100644 --- a/apps/desktop/src-tauri/src/app_state.rs +++ b/apps/desktop/src-tauri/src/app_state.rs @@ -62,16 +62,12 @@ impl AppState { /// 获取数据库实例 pub fn get_database(&self) -> Arc { - // 如果数据库未初始化,先初始化 - if self.database.lock().unwrap().is_none() { - let _ = self.initialize_database(); - } - - // 使用静态数据库实例,避免重复初始化 + // 使用全局静态数据库实例,确保整个应用只有一个数据库实例 use std::sync::OnceLock; static DATABASE_INSTANCE: OnceLock> = OnceLock::new(); DATABASE_INSTANCE.get_or_init(|| { + // 只在第一次调用时初始化数据库 Arc::new(Database::new().unwrap()) }).clone() }