br_pgsql/
pools.rs

1use std::sync::Mutex;
2use crate::config::Config;
3use crate::connect::Connect;
4
5static DB_POOL: std::sync::LazyLock<Mutex<Vec<Connect>>> = std::sync::LazyLock::new(|| Mutex::new(Vec::new()));
6
7#[derive(Clone)]
8pub struct Pools {
9    /// 线程数量
10    pub config: Config,
11    /// 最大线程数量
12    max_pools: usize,
13}
14
15impl Pools {
16    pub fn new(config: Config,size:usize) -> Result<Self, String> {
17        for _ in 0..size {
18            let client = Connect::new(config.clone())?;
19            DB_POOL.lock().unwrap().push(client);
20        }
21        Ok(Self { config, max_pools: size })
22    }
23    pub fn get_connect(&mut self) -> Result<Connect, String> {
24        loop {
25            if DB_POOL.lock().unwrap().len() > self.max_pools {
26                continue;
27            }
28            break;
29        }
30        let mut pool = DB_POOL.lock().unwrap();
31        Ok(pool.pop().unwrap())
32    }
33}