chore: update database connection settings and enhance Prisma client configuration
- Added connection timeout to DATABASE_URL in .env. - Introduced DATABASE_CONNECTION_LIMIT, DATABASE_POOL_MIN, and DATABASE_POOL_MAX for connection pooling. - Enhanced Prisma client initialization with logging and connection pool settings. - Implemented graceful disconnection on process termination signals.
This commit is contained in:
parent
643895ccb2
commit
b97af6338e
5
.env
5
.env
@ -5,8 +5,11 @@
|
||||
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
|
||||
|
||||
# DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;"
|
||||
DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;"
|
||||
DATABASE_URL="sqlserver://3team.devgrr.kr:1433;database=onsitesurvey;user=sa;password=1q2w3e4r!;encrypt=true;trustServerCertificate=true;connectionTimeout=30000"
|
||||
# DATABASE_URL="mysql://root:root@localhost:3306/onsitesurvey"
|
||||
DATABASE_CONNECTION_LIMIT=10
|
||||
DATABASE_POOL_MIN=2
|
||||
DATABASE_POOL_MAX=10
|
||||
|
||||
# SESSION_PASSWORD="QWERASDFZXCV1234567890REWQFDSAVCXZ"
|
||||
SESSION_PASSWORD="This application is for mobile field research"
|
||||
@ -1,11 +1,46 @@
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
|
||||
declare global {
|
||||
var prisma: PrismaClient | undefined
|
||||
const globalForPrisma = globalThis as unknown as {
|
||||
prisma: PrismaClient | undefined
|
||||
}
|
||||
|
||||
export const prisma = global.prisma || new PrismaClient()
|
||||
export const prisma =
|
||||
globalForPrisma.prisma ??
|
||||
new PrismaClient({
|
||||
log: ['query', 'error', 'warn'],
|
||||
datasources: {
|
||||
db: {
|
||||
url: process.env.DATABASE_URL,
|
||||
},
|
||||
},
|
||||
// connection pool 설정
|
||||
connectionLimit: Number(process.env.DATABASE_CONNECTION_LIMIT) || 10, // 기본값 10
|
||||
pool: {
|
||||
min: Number(process.env.POOL_MIN) || 2, // 기본값 2
|
||||
max: Number(process.env.POOL_MAX) || 10, // 기본값 10
|
||||
idleTimeoutMillis: 30000, // 유휴 연결 타임아웃 (30초)
|
||||
acquireTimeoutMillis: 30000, // 연결 획득 타임아웃 (30초)
|
||||
},
|
||||
})
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
global.prisma = prisma
|
||||
}
|
||||
prisma.$on('query', (e: any) => {
|
||||
console.log('Query: ' + e.query)
|
||||
console.log('Duration: ' + e.duration + 'ms')
|
||||
})
|
||||
|
||||
prisma.$on('error', (e: any) => {
|
||||
console.error('Prisma Error:', e)
|
||||
})
|
||||
|
||||
// 애플리케이션 종료 시 연결 정리
|
||||
process.on('SIGINT', async () => {
|
||||
await prisma.$disconnect()
|
||||
process.exit(0)
|
||||
})
|
||||
|
||||
process.on('SIGTERM', async () => {
|
||||
await prisma.$disconnect()
|
||||
process.exit(0)
|
||||
})
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user