chuanyue-service/library/src/core/db.rs
2024-03-10 09:46:37 +08:00

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()
};
}