import mysql from "mysql2/promise"; // Variablen für den Singleton-Pool let cachedPool; let connectionCount = 0; // Zähler für die aktiven Verbindungen // Funktion zum Abrufen des Pools function getPool() { if (!cachedPool) { cachedPool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, port: process.env.DB_PORT, connectionLimit: 20, // Setze ein Limit für gleichzeitige Verbindungen waitForConnections: true, queueLimit: 10, // Warteschlangenlimit für Verbindungen connectTimeout: 5000, // Timeout für Verbindungsversuche (5 Sekunden) acquireTimeout: 10000, // Timeout für Verbindungsanforderungen aus dem Pool (10 Sekunden) idleTimeout: 60000, // 1 Minute }); // Ereignisse für das Protokollieren der Verbindungsstatistiken cachedPool.on("acquire", () => { connectionCount++; console.log(`[ACQUIRE] Active connections: ${connectionCount}`); }); cachedPool.on("release", () => { connectionCount--; console.log(`[RELEASE] Active connections: ${connectionCount}`); }); cachedPool.on("enqueue", () => { console.log(`[ENQUEUE] Waiting for available connection slot.`); }); } return cachedPool; } // Optionale Funktion zum Schließen aller Verbindungen im Pool (manuell aufzurufen) export function closePool() { if (cachedPool) { cachedPool.end(() => { console.log("All pool connections closed."); }); cachedPool = null; // Setze den Pool auf null, um sicherzustellen, dass er neu erstellt wird, falls benötigt. } } export default getPool;