133 lines
3.9 KiB
Java
133 lines
3.9 KiB
Java
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<String, com.typesafe.config.ConfigValue> 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");
|
|
}
|
|
|
|
|
|
}
|