feat: 实现数据库初始化配置化,新增环境变量 ENABLE_DATABASE_INITIALIZATION,修改初始化逻辑以支持启用/禁用数据库初始化和分区维护

This commit is contained in:
2026-03-04 09:51:26 +08:00
parent a8e8913ea5
commit 677db35cdf
5 changed files with 169 additions and 10 deletions

File diff suppressed because one or more lines are too long

View File

@@ -41,3 +41,8 @@ REDIS_API_BASE_URL=http://localhost:3000
# ROOM_STATUS_DB_TABLE=room_status_moment
ENABLE_LOOP_NAME_AUTO_GENERATION=true
# Database Initialization Configuration
# Set to 'false' to skip automatic database creation, schema setup, and partition management
# When disabled, the service will start consuming Kafka messages and writing to existing database immediately
# Default: true (enable database initialization)
ENABLE_DATABASE_INITIALIZATION=true

View File

@@ -64,5 +64,6 @@ export const config = {
schema: process.env.ROOM_STATUS_DB_SCHEMA || 'room_status',
table: process.env.ROOM_STATUS_DB_TABLE || 'room_status_moment'
},
enableLoopNameAutoGeneration: process.env.ENABLE_LOOP_NAME_AUTO_GENERATION === 'true'
enableLoopNameAutoGeneration: process.env.ENABLE_LOOP_NAME_AUTO_GENERATION === 'true',
enableDatabaseInitialization: process.env.ENABLE_DATABASE_INITIALIZATION !== 'false'
};

View File

@@ -18,7 +18,13 @@ import { BatchProcessor } from './db/batchProcessor.js';
const bootstrap = async () => {
// 0. Initialize Database (Create DB, Schema, Table, Partitions)
await dbInitializer.initialize();
// Only execute initialization if enabled (default: true)
if (config.enableDatabaseInitialization) {
logger.info('Database initialization is enabled. Starting initialization...');
await dbInitializer.initialize();
} else {
logger.info('Database initialization is disabled. Skipping database initialization, schema creation, and partition setup.');
}
// 0.1 Initialize Project Metadata Cache
await projectMetadata.init();
@@ -27,14 +33,19 @@ const bootstrap = async () => {
const metricCollector = new MetricCollector();
// 1. Setup Partition Maintenance Cron Job (Every day at 00:00)
cron.schedule('0 0 * * *', async () => {
logger.info('Running scheduled partition maintenance...');
try {
await partitionManager.ensurePartitions(30);
} catch (err) {
logger.error('Scheduled partition maintenance failed', err);
}
});
// Only setup partition maintenance cron if database initialization is enabled
if (config.enableDatabaseInitialization) {
cron.schedule('0 0 * * *', async () => {
logger.info('Running scheduled partition maintenance...');
try {
await partitionManager.ensurePartitions(30);
} catch (err) {
logger.error('Scheduled partition maintenance failed', err);
}
});
} else {
logger.info('Partition maintenance cron job is disabled (database initialization is disabled).');
}
// 1.1 Setup Metric Reporting Cron Job (Every minute)
// Moved after redisIntegration initialization