use sea_orm::DatabaseConnection;
use sea_orm::{ConnectOptions, Database};
use std::sync::OnceLock;
use tracing::info;
static MYSQL: OnceLock<DatabaseConnection> = OnceLock::<DatabaseConnection>::new();
pub fn init_mysql(
dburl: String,
max_connections: u32,
min_connections: u32,
connect_timeout: u64,
idle_timeout: u64,
max_lifetime: u64,
sqlx_logging: bool,
) -> &'static DatabaseConnection {
MYSQL.get_or_init(|| {
let mut opt = ConnectOptions::new(dburl.to_owned());
opt.max_connections(max_connections)
.min_connections(min_connections)
.connect_timeout(std::time::Duration::from_secs(connect_timeout))
.idle_timeout(std::time::Duration::from_secs(idle_timeout))
.max_lifetime(std::time::Duration::from_secs(max_lifetime))
.sqlx_logging(sqlx_logging);
let conn = futures::executor::block_on(async { Database::connect(opt).await.unwrap() });
info!("connect to mysql successfully");
conn
})
}
pub fn get_mysql() -> &'static DatabaseConnection {
MYSQL.get().unwrap()
}