webbase/
mysql.rs

1use sea_orm::DatabaseConnection;
2use sea_orm::{ConnectOptions, Database};
3use std::sync::OnceLock;
4use tracing::info;
5
6static MYSQL: OnceLock<DatabaseConnection> = OnceLock::<DatabaseConnection>::new();
7
8pub fn init_mysql(
9    dburl: String,
10    max_connections: u32,
11    min_connections: u32,
12    connect_timeout: u64,
13    idle_timeout: u64,
14    max_lifetime: u64,
15    sqlx_logging: bool,
16) -> &'static DatabaseConnection {
17    MYSQL.get_or_init(|| {
18        let mut opt = ConnectOptions::new(dburl.to_owned());
19        opt.max_connections(max_connections)
20            .min_connections(min_connections)
21            .connect_timeout(std::time::Duration::from_secs(connect_timeout))
22            .idle_timeout(std::time::Duration::from_secs(idle_timeout))
23            .max_lifetime(std::time::Duration::from_secs(max_lifetime))
24            .sqlx_logging(sqlx_logging);
25        let conn = futures::executor::block_on(async { Database::connect(opt).await.unwrap() });
26        info!("connect to mysql successfully");
27        conn
28    })
29}
30
31pub fn get_mysql() -> &'static DatabaseConnection {
32    MYSQL.get().unwrap()
33}