40 lines
1.2 KiB
Rust
40 lines
1.2 KiB
Rust
use std::sync::OnceLock;
|
|
use std::time::Duration;
|
|
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
|
|
use crate::core::config::Config;
|
|
|
|
static DB: OnceLock<DatabaseConnection> = OnceLock::new();
|
|
|
|
pub async fn init_database(config: &Config) {
|
|
let db_cfg = &config.database;
|
|
let mut conn_option = ConnectOptions::new(&db_cfg.url);
|
|
|
|
conn_option.min_connections(db_cfg.options.min_conns)
|
|
.max_connections(db_cfg.options.max_conns)
|
|
.connect_timeout(Duration::from_secs(db_cfg.options.conn_timeout))
|
|
.idle_timeout(Duration::from_secs(db_cfg.options.idle_timeout))
|
|
.max_lifetime(Duration::from_secs(db_cfg.options.max_lifetime))
|
|
.sqlx_logging(db_cfg.options.sql_logging);
|
|
|
|
let conn = Database::connect(conn_option)
|
|
.await
|
|
.unwrap_or_else(|e| panic!("数据库连接失败:{}", e));
|
|
|
|
let _ = conn
|
|
.ping()
|
|
.await
|
|
.is_err_and(|e| panic!("数据库连接失败:{}", e));
|
|
|
|
let _ = DB.set(conn);
|
|
}
|
|
|
|
pub fn conn() -> &'static DatabaseConnection {
|
|
DB.get().unwrap_or_else(|| panic!("数据库连接未初始化"))
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! db {
|
|
() => {
|
|
library::core::db::conn()
|
|
};
|
|
} |