server: Allow configuring max database connections

We set it to 20 by default. The SQLx default is 10.
This commit is contained in:
Zhaofeng Li 2023-02-11 01:16:55 -07:00
parent fce89f4c95
commit 9fdec3397d
2 changed files with 14 additions and 2 deletions

View file

@ -129,6 +129,10 @@ pub struct DatabaseConfig {
/// If enabled, a heartbeat query will be sent every minute. /// If enabled, a heartbeat query will be sent every minute.
#[serde(default = "default_db_heartbeat")] #[serde(default = "default_db_heartbeat")]
pub heartbeat: bool, pub heartbeat: bool,
/// The maximum number of concurrent connections to maintain.
#[serde(default = "default_db_max_connections")]
pub max_connections: u32,
} }
/// File storage configuration. /// File storage configuration.
@ -315,6 +319,10 @@ fn default_db_heartbeat() -> bool {
false false
} }
fn default_db_max_connections() -> u32 {
20
}
fn default_soft_delete_caches() -> bool { fn default_soft_delete_caches() -> bool {
false false
} }

View file

@ -37,7 +37,7 @@ use axum::{
http::{uri::Scheme, Uri}, http::{uri::Scheme, Uri},
Router, Router,
}; };
use sea_orm::{query::Statement, ConnectionTrait, Database, DatabaseConnection}; use sea_orm::{query::Statement, ConnectionTrait, ConnectOptions, Database, DatabaseConnection};
use tokio::sync::OnceCell; use tokio::sync::OnceCell;
use tokio::time; use tokio::time;
use tower_http::catch_panic::CatchPanicLayer; use tower_http::catch_panic::CatchPanicLayer;
@ -105,7 +105,11 @@ impl StateInner {
async fn database(&self) -> ServerResult<&DatabaseConnection> { async fn database(&self) -> ServerResult<&DatabaseConnection> {
self.database self.database
.get_or_try_init(|| async { .get_or_try_init(|| async {
Database::connect(&self.config.database.url) let options = ConnectOptions::new(self.config.database.url.to_owned())
.max_connections(self.config.database.max_connections)
.to_owned();
Database::connect(options)
.await .await
.map_err(ServerError::database_error) .map_err(ServerError::database_error)
}) })