From 044259fc62a34b6fafd08946ed8e15add41925cf Mon Sep 17 00:00:00 2001 From: Ahmedscreativeverse Date: Sat, 25 Apr 2026 21:55:28 +0100 Subject: [PATCH] Enhance database connection pool configuration with timeout settings --- BackEnd/.env.example | 7 +++++++ BackEnd/src/config/ormconfig.ts | 13 +++++-------- BackEnd/src/database/data-source.ts | 8 ++++++++ .../services/database-pool-monitor.service.ts | 8 ++++---- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/BackEnd/.env.example b/BackEnd/.env.example index 8f9e97a9..688f720d 100644 --- a/BackEnd/.env.example +++ b/BackEnd/.env.example @@ -17,6 +17,13 @@ LOG_RESPONSE_DATA=false # Database DATABASE_URL=postgresql://user:password@localhost:5432/stellar_earn +# Database Connection Pool +# Tune these for your environment (profile connections, then adjust) +DB_POOL_MAX=10 +DB_POOL_MIN=2 +DB_POOL_CONNECTION_TIMEOUT=10000 +DB_POOL_IDLE_TIMEOUT=30000 + # Migrations TYPEORM_MIGRATIONS_TABLE=typeorm_migrations TYPEORM_MIGRATIONS_RUN=false diff --git a/BackEnd/src/config/ormconfig.ts b/BackEnd/src/config/ormconfig.ts index bb778061..e6e5a2b6 100644 --- a/BackEnd/src/config/ormconfig.ts +++ b/BackEnd/src/config/ormconfig.ts @@ -60,14 +60,11 @@ export default new DataSource({ logging: process.env.NODE_ENV === 'development', // Add these extra options for Neon extra: { - ssl: { - rejectUnauthorized: false, - require: true, - }, - // Connection pool settings - max: 10, - connectionTimeoutMillis: 10000, - idleTimeoutMillis: 30000, + ssl: { rejectUnauthorized: false, require: true }, + max: parseInt(process.env.DB_POOL_MAX ?? '10', 10), + min: parseInt(process.env.DB_POOL_MIN ?? '2', 10), + connectionTimeoutMillis: parseInt(process.env.DB_POOL_CONNECTION_TIMEOUT ?? '10000', 10), + idleTimeoutMillis: parseInt(process.env.DB_POOL_IDLE_TIMEOUT ?? '30000', 10), }, }); diff --git a/BackEnd/src/database/data-source.ts b/BackEnd/src/database/data-source.ts index bce2be83..e8abdb5e 100644 --- a/BackEnd/src/database/data-source.ts +++ b/BackEnd/src/database/data-source.ts @@ -8,11 +8,19 @@ dotenv.config({ path: path.resolve(__dirname, '../../.env') }); export const dataSourceOptions: DataSourceOptions = { type: 'postgres', url: process.env.DATABASE_URL, + ssl: { rejectUnauthorized: false }, entities: [path.join(__dirname, '..', '**', 'entities', '*.entity.{ts,js}')], migrations: [path.join(__dirname, 'migrations', '*.{ts,js}')], migrationsTableName: 'typeorm_migrations', synchronize: false, logging: process.env.NODE_ENV === 'development', + extra: { + ssl: { rejectUnauthorized: false, require: true }, + max: parseInt(process.env.DB_POOL_MAX ?? '10', 10), + min: parseInt(process.env.DB_POOL_MIN ?? '2', 10), + connectionTimeoutMillis: parseInt(process.env.DB_POOL_CONNECTION_TIMEOUT ?? '10000', 10), + idleTimeoutMillis: parseInt(process.env.DB_POOL_IDLE_TIMEOUT ?? '30000', 10), + }, }; const AppDataSource = new DataSource(dataSourceOptions); diff --git a/BackEnd/src/modules/health/services/database-pool-monitor.service.ts b/BackEnd/src/modules/health/services/database-pool-monitor.service.ts index 45d749b4..dc274b3d 100644 --- a/BackEnd/src/modules/health/services/database-pool-monitor.service.ts +++ b/BackEnd/src/modules/health/services/database-pool-monitor.service.ts @@ -86,10 +86,10 @@ export class DatabasePoolMonitorService implements OnModuleInit, OnModuleDestroy const extra = options.extra || {}; return { - max: extra.max || 10, - min: extra.min || 0, - connectionTimeoutMillis: extra.connectionTimeoutMillis || 10000, - idleTimeoutMillis: extra.idleTimeoutMillis || 30000, + max: extra.max ?? parseInt(process.env.DB_POOL_MAX ?? '10', 10), + min: extra.min ?? parseInt(process.env.DB_POOL_MIN ?? '2', 10), + connectionTimeoutMillis: extra.connectionTimeoutMillis ?? parseInt(process.env.DB_POOL_CONNECTION_TIMEOUT ?? '10000', 10), + idleTimeoutMillis: extra.idleTimeoutMillis ?? parseInt(process.env.DB_POOL_IDLE_TIMEOUT ?? '30000', 10), }; }