Skip to main content

server_config/
database.rs

1use std::time::Duration;
2
3use serde::Deserialize;
4
5#[derive(Debug, Deserialize, Clone)]
6pub struct DatabaseConfig {
7    pub url: String,
8    #[serde(default = "default_max_connections")]
9    pub max_connections: u32,
10    #[serde(default = "default_min_connections")]
11    pub min_connections: u32,
12    #[serde(default = "default_connect_timeout_secs")]
13    pub connect_timeout: u64,
14    #[serde(default = "default_idle_timeout_secs")]
15    pub idle_timeout: Option<u64>,
16    #[serde(default = "default_max_lifetime_secs")]
17    pub max_lifetime: Option<u64>,
18}
19
20fn default_max_connections() -> u32 {
21    10
22}
23fn default_min_connections() -> u32 {
24    0
25} // sqlx 默认是 0(无最小空闲)
26fn default_connect_timeout_secs() -> u64 {
27    5
28}
29fn default_idle_timeout_secs() -> Option<u64> {
30    Some(600)
31} // 10分钟
32fn default_max_lifetime_secs() -> Option<u64> {
33    Some(1800)
34} // 30分钟
35
36impl DatabaseConfig {
37    /// 将配置转换为 Duration 类型,用于 SQLx
38    pub fn connect_timeout_duration(&self) -> Duration {
39        Duration::from_secs(self.connect_timeout)
40    }
41
42    pub fn idle_timeout_duration(&self) -> Option<Duration> {
43        self.idle_timeout.map(Duration::from_secs)
44    }
45
46    pub fn max_lifetime_duration(&self) -> Option<Duration> {
47        self.max_lifetime.map(Duration::from_secs)
48    }
49}