package com.haobang.config; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import java.io.File; import com.typesafe.config.ConfigValueFactory; import java.util.Map; public class AppConfig { private static final Config config; static { // 加载配置文件 File configFile = new File("application.properties"); Config loadedConfig; if (configFile.exists()) { loadedConfig = ConfigFactory.parseFile(configFile); } else { loadedConfig = ConfigFactory.load("application.properties"); } // 解析环境变量占位符 config = resolveEnvironmentVariables(loadedConfig); } /** * 解析环境变量占位符 */ private static Config resolveEnvironmentVariables(Config originalConfig) { Config resolvedConfig = originalConfig; // 遍历所有配置项,查找需要解析的占位符 for (Map.Entry entry : originalConfig.entrySet()) { String key = entry.getKey(); String value = originalConfig.getString(key); if (value.contains("${")) { String resolvedValue = resolvePlaceholder(value); resolvedConfig = resolvedConfig.withValue( key, ConfigValueFactory.fromAnyRef(resolvedValue) ); } } return resolvedConfig; } /** * 解析单个占位符值 * 格式: ${ENV_VAR:default_value} */ private static String resolvePlaceholder(String value) { if (!value.startsWith("${") || !value.endsWith("}")) { return value; } String placeholder = value.substring(2, value.length() - 1); String[] parts = placeholder.split(":"); if (parts.length == 0) { return value; // 无效格式,返回原值 } String envVarName = parts[0].trim(); String defaultValue = parts.length > 1 ? parts[1].trim() : ""; // 1. 从系统环境变量获取 String envValue = System.getenv(envVarName); if (envValue != null && !envValue.trim().isEmpty()) { return envValue.trim(); } // 2. 从系统属性获取 (java -D参数) String sysValue = System.getProperty(envVarName); if (sysValue != null && !sysValue.trim().isEmpty()) { return sysValue.trim(); } // 3. 返回默认值 return defaultValue; } // Syslog 配置 public static int getSyslogTcpPort() { return config.getInt("syslog.tcp.port"); } public static int getSyslogUdpPort() { return config.getInt("syslog.udp.port"); } public static int getSyslogMaxFrameLength() { return config.getInt("syslog.max.frame.length"); } public static int getSyslogBufferSize() { return config.getInt("syslog.buffer.size"); } // app service 配置 public static String getAppServieDeviceId() { return config.getString("app.service.device_id"); } public static String getAppServieDeviceName() { return config.getString("app.service.device_name"); } public static String getAppServieVendor() { return config.getString("app.service.vendor"); } public static String getAppServieProductName() { return config.getString("app.service.product_name"); } public static String getAppServieDataType() { return config.getString("app.service.data_type"); } // kafka 配置 public static String getKafkaProducerBootstrap() { return config.getString("spring.kafka.producer.bootstrap-servers"); } public static String getKafkaProducerTopic() { return config.getString("spring.kafka.producer.topic"); } public static int getDeviceCollectId() { return config.getInt("app.service.device_collect_id"); } }