Environment初始化逻辑调整,针对5级配置优化

This commit is contained in:
aoshiguchen
2023-03-06 18:52:40 +08:00
parent db41228ce8
commit c3f7bb571f
10 changed files with 141 additions and 11 deletions
@@ -36,4 +36,5 @@ import java.lang.annotation.*;
@NonIntercept
public @interface NeutrinoApplication {
String[] scanBasePackages() default {};
String environmentVariableKey() default "";
}
@@ -24,7 +24,6 @@ import java.util.*;
*/
public class NvMap<K,V> implements Map<K,V> , Serializable, Cloneable {
private HashMap<K,K> aliasMap;
private HashMap<K,K> reverseAliasMap;
private LinkedHashMap<K, V> _m;
private HashMap<K, K> _k;
private Locale locale;
@@ -46,7 +45,6 @@ public class NvMap<K,V> implements Map<K,V> , Serializable, Cloneable {
public static <K,V> NvMap<K,V> of(NvMap<K,V> parent) {
NvMap<K,V> nvMap = new NvMap(parent);
nvMap.aliasMap.putAll(parent.aliasMap);
nvMap.reverseAliasMap.putAll(parent.reverseAliasMap);
return nvMap;
}
@@ -67,7 +65,6 @@ public class NvMap<K,V> implements Map<K,V> , Serializable, Cloneable {
public NvMap<K,V> setAlias(K k, K alias) {
this.aliasMap.put(convertKey(alias), convertKey(k));
this.reverseAliasMap.put(convertKey(k), convertKey(alias));
return this;
}
@@ -90,7 +87,6 @@ public class NvMap<K,V> implements Map<K,V> , Serializable, Cloneable {
};
this._k = new HashMap<>(initialCapacity);
this.aliasMap = new HashMap<>(initialCapacity);
this.reverseAliasMap = new HashMap<>(initialCapacity);
this.locale = (locale != null ? locale : Locale.getDefault());
}
@@ -244,7 +240,6 @@ public class NvMap<K,V> implements Map<K,V> , Serializable, Cloneable {
res._m = (LinkedHashMap<K, V>) _m.clone();
res._k = (HashMap<K, K>) _k.clone();
res.aliasMap = (HashMap<K, K>) aliasMap.clone();
res.reverseAliasMap = (HashMap<K, K>) reverseAliasMap.clone();
res.locale = locale;
return res;
}
@@ -118,6 +118,7 @@ public final class NvMaps {
} else if (fileType == FileTypeEnum.PROPERTIES) {
Properties properties = new Properties();
properties.load(in);
load(properties);
} else if (fileType == FileTypeEnum.JSON) {
String content = FileUtil.readContentAsString(in);
JSONObject jsonObject = JSONObject.parseObject(content);
@@ -166,7 +167,7 @@ public final class NvMaps {
}
}
public NvMaps loadEnvironmentVariable() {
public NvMaps loadEnvironmentVariable(String envKey) {
String env = System.getenv(MetaDataConstant.ENVIRONMENT_VARIABLE_KEY);
if (StringUtil.isEmpty(env)) {
return this;
@@ -88,4 +88,37 @@ public interface MetaDataConstant {
* 环境变量key
*/
String ENVIRONMENT_VARIABLE_KEY = "NEUTRINO_PROXY";
interface Config {
String NEUTRINO_APPLICATION_NAME = "neutrino.application.name";
String NEUTRINO_HTTP_ENABLE = "neutrino.http.enable";
String NEUTRINO_HTTP_PORT = "neutrino.http.port";
String NEUTRINO_HTTP_CONTEXT_PATH = "neutrino.http.context-path";
String NEUTRINO_HTTP_MAX_CONTENT_LENGTH_DESC = "neutrino.http.max-content-length-desc";
String NEUTRINO_HTTP_STATIC_RESOURCE_LOCATIONS = "neutrino.http.static-resource.locations";
String NEUTRINO_PROXY_PROTOCOL_MAX_FRAME_LENGTH = "neutrino.proxy.protocol.max-frame-length";
String NEUTRINO_PROXY_PROTOCOL_LENGTH_FIELD_OFFSET = "neutrino.proxy.protocol.length-field-offset";
String NEUTRINO_PROXY_PROTOCOL_LENGTH_FIELD_LENGTH = "neutrino.proxy.protocol.length-field-length";
String NEUTRINO_PROXY_PROTOCOL_INITIAL_BYTES_TO_STRIP = "neutrino.proxy.protocol.initial-bytes-to-strip";
String NEUTRINO_PROXY_PROTOCOL_LENGTH_ADJUSTMENT = "neutrino.proxy.protocol.length-adjustment";
String NEUTRINO_PROXY_PROTOCOL_READ_IDLE_TIME = "neutrino.proxy.protocol.read-idle-time";
String NEUTRINO_PROXY_PROTOCOL_WRITE_IDLE_TIME = "neutrino.proxy.protocol.write-idle-time";
String NEUTRINO_PROXY_PROTOCOL_ALL_IDLE_TIME_SECONDS = "neutrino.proxy.protocol.all-idle-time-seconds";
String NEUTRINO_PROXY_SERVER_PORT = "neutrino.proxy.server.port";
String NEUTRINO_PROXY_SERVER_SSL_PORT = "neutrino.proxy.server.ssl-port";
String NEUTRINO_PROXY_SERVER_KEY_STORE_PASSWORD = "neutrino.proxy.server.key-store-password";
String NEUTRINO_PROXY_SERVER_KEY_MANAGER_PASSWORD = "neutrino.proxy.server.key-manager-password";
String NEUTRINO_PROXY_SERVER_JKS_PATH = "neutrino.proxy.server.jks-path";
String NEUTRINO_PROXY_CLIENT_KEY_STORE_PASSWORD = "neutrino.proxy.client.key-store-password";
String NEUTRINO_PROXY_CLIENT_JKS_PATH = "neutrino.proxy.client.jks-path";
String NEUTRINO_PROXY_CLIENT_SERVER_IP = "neutrino.proxy.client.server-ip";
String NEUTRINO_PROXY_CLIENT_SERVER_PORT = "neutrino.proxy.client.server-port";
String NEUTRINO_PROXY_CLIENT_SSL_ENABLE = "neutrino.proxy.client.ssl-enable";
String NEUTRINO_PROXY_CLIENT_OBTAIN_LICENSE_INTERVAL = "neutrino.proxy.client.obtain-license-interval";
String NEUTRINO_DATA_DB_TYPE = "neutrino.data.db.type";
String NEUTRINO_DATA_DB_URL = "neutrino.data.db.url";
String NEUTRINO_DATA_DB_DRIVER_CLASS = "neutrino.data.db.driver-class";
String NEUTRINO_DATA_DB_USERNAME = "neutrino.data.db.username";
String NEUTRINO_DATA_DB_PASSWORD = "neutrino.data.db.password";
}
}
@@ -22,7 +22,10 @@
package fun.asgc.neutrino.core.context;
import fun.asgc.neutrino.core.base.NvMap;
import fun.asgc.neutrino.core.base.NvMaps;
import fun.asgc.neutrino.core.base.event.SimpleApplicationEventManager;
import fun.asgc.neutrino.core.constant.MetaDataConstant;
import fun.asgc.neutrino.core.util.ArrayUtil;
import fun.asgc.neutrino.core.util.LockUtil;
import fun.asgc.neutrino.core.util.StringUtil;
@@ -34,6 +37,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static fun.asgc.neutrino.core.constant.MetaDataConstant.Config.*;
/**
*
* @author: aoshiguchen
@@ -74,11 +79,92 @@ public class Environment {
* 默认的应用事件管理器
*/
private SimpleApplicationEventManager defaultApplicationEventManager;
/**
* 全局配置
*/
private NvMap nvMap;
public NvMap getNvMap() {
return nvMap;
}
public void loadNvMap(String envKey) throws Exception {
// 创建NvMaps实例
NvMaps nvMaps = NvMaps.of();
// 阶段1:设置内部默认值、别名
nvMaps.setAlias(NEUTRINO_APPLICATION_NAME, "app.name");
nvMaps.setKv(NEUTRINO_APPLICATION_NAME, "neutrino-app");
nvMaps.setAlias(NEUTRINO_HTTP_ENABLE, "http.enable");
nvMaps.setKv(NEUTRINO_HTTP_ENABLE, true);
nvMaps.setAlias(NEUTRINO_HTTP_PORT, "http.port");
nvMaps.setKv(NEUTRINO_HTTP_PORT, 8080);
nvMaps.setAlias(NEUTRINO_HTTP_CONTEXT_PATH, "http.context-path");
nvMaps.setKv(NEUTRINO_HTTP_CONTEXT_PATH, "/");
nvMaps.setAlias(NEUTRINO_HTTP_MAX_CONTENT_LENGTH_DESC, "http.max-content-length-desc");
nvMaps.setKv(NEUTRINO_HTTP_MAX_CONTENT_LENGTH_DESC, "/");
nvMaps.setAlias(NEUTRINO_HTTP_STATIC_RESOURCE_LOCATIONS, "http.static-resource");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_MAX_FRAME_LENGTH, "protocol.max-frame-length");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_LENGTH_FIELD_OFFSET, "protocol.length-field-offset");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_LENGTH_FIELD_LENGTH, "protocol.length-field-length");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_INITIAL_BYTES_TO_STRIP, "protocol.initial-bytes-to-strip");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_LENGTH_ADJUSTMENT, "protocol.length-adjustment");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_READ_IDLE_TIME, "protocol.read-idle-time");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_WRITE_IDLE_TIME, "protocol.write-idle-time");
nvMaps.setAlias(NEUTRINO_PROXY_PROTOCOL_ALL_IDLE_TIME_SECONDS, "protocol.all-idle-time-seconds");
nvMaps.setAlias(NEUTRINO_PROXY_SERVER_PORT, "proxy.port");
nvMaps.setAlias(NEUTRINO_PROXY_SERVER_SSL_PORT, "proxy.ssl-port");
nvMaps.setAlias(NEUTRINO_PROXY_SERVER_KEY_STORE_PASSWORD, "proxy.key-store-password");
nvMaps.setAlias(NEUTRINO_PROXY_SERVER_KEY_MANAGER_PASSWORD, "proxy.key-manager-password");
nvMaps.setAlias(NEUTRINO_PROXY_SERVER_JKS_PATH, "proxy.jks-path");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_KEY_STORE_PASSWORD, "proxy.key-store-password");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_JKS_PATH, "proxy.jks-path");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_SERVER_IP, "proxy.server-ip");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_SERVER_PORT, "proxy.server-port");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_SSL_ENABLE, "proxy.ssl-enable");
nvMaps.setAlias(NEUTRINO_PROXY_CLIENT_OBTAIN_LICENSE_INTERVAL, "proxy.obtain-license-interval");
nvMaps.setAlias(NEUTRINO_DATA_DB_TYPE, "db.type");
nvMaps.setAlias(NEUTRINO_DATA_DB_URL, "db.url");
nvMaps.setAlias(NEUTRINO_DATA_DB_DRIVER_CLASS, "db.driver-class");
nvMaps.setAlias(NEUTRINO_DATA_DB_USERNAME, "db.username");
nvMaps.setAlias(NEUTRINO_DATA_DB_PASSWORD, "db.password");
nvMaps.stageDone();
// 阶段2:内部配置文件
nvMaps.loadFile(MetaDataConstant.CLASSPATH_RESOURCE_IDENTIFIER.concat("/application.yml"));
nvMaps.stageDone();
// 阶段3:环境变量
if (!StringUtil.isEmpty(envKey)) {
nvMaps.loadEnvironmentVariable(envKey);
nvMaps.stageDone();
}
// 结算4:外部配置文件
nvMaps.loadFile("./.application.properties");
nvMaps.stageDone();
// 阶段5:启动参数
nvMaps.loadMainArgs(this.mainArgs);
nvMaps.stageDone();
// 获取NvMap实例
this.nvMap = nvMaps.getNvMap();
}
/**
* 参数map
*/
@Deprecated
private Map<String, String> mainArgsMap = null;
@Deprecated
private Map<String, String> getMainArgsMap() {
return LockUtil.doubleCheckProcessForNoException(
() -> null == mainArgsMap,
@@ -103,10 +189,12 @@ public class Environment {
);
}
@Deprecated
private String getMainArgs(String key) {
return getMainArgsMap().get(key);
}
@Deprecated
public Integer getMainArgsForInteger(String key, Integer defaultValue) {
String val = getMainArgs(key);
Integer res = null;
@@ -120,6 +208,7 @@ public class Environment {
return (null != res) ? res : defaultValue;
}
@Deprecated
public Boolean getMainArgsForBoolean(String key, Boolean defaultValue) {
String val = getMainArgs(key);
Boolean res = null;
@@ -133,11 +222,13 @@ public class Environment {
return (null != res) ? res : defaultValue;
}
@Deprecated
public String getMainArgsForString(String key, String defaultValue) {
String res = getMainArgs(key);
return !StringUtil.isEmpty(res) ? res : defaultValue;
}
@Deprecated
public String getMainArgsForString(String key) {
return getMainArgsForString(key, null);
}
@@ -118,7 +118,13 @@ public class NeutrinoLauncher {
// 加载应用配置
environment.setConfig(ConfigUtil.getYmlConfig(ApplicationConfig.class));
log.info("load ApplicationConfig finished.");
try {
environment.loadNvMap(neutrinoApplication.environmentVariableKey());
log.info("load ApplicationConfig finished.");
} catch (Exception e) {
log.error("load ApplicationConfig err.", e);
}
}
/**
@@ -32,11 +32,12 @@ public class NvMapsTest {
nvMaps.stageDone();
// 阶段3:环境变量
nvMaps.loadEnvironmentVariable();
nvMaps.loadEnvironmentVariable("NEUTRINO_PROXY");
nvMaps.stageDone();
// 结算4:外部配置文件
nvMaps.loadFile(NvMapsTest.class.getResource("/aaa.json").getPath());
// nvMaps.loadFile(NvMapsTest.class.getResource("/aaa.json").getPath());
nvMaps.loadFile(NvMapsTest.class.getResource("/aaa.properties").getPath());
nvMaps.stageDone();
// 阶段5:启动参数
@@ -0,0 +1,2 @@
#neutrino.application.name=test
app-name=test1
@@ -30,7 +30,7 @@ import fun.asgc.neutrino.core.context.NeutrinoLauncher;
* @author: aoshiguchen
* @date: 2022/6/16
*/
@NeutrinoApplication
@NeutrinoApplication(environmentVariableKey = "NeutrinoProxyClient")
public class ProxyClient {
public static void main(String[] args) {
@@ -32,7 +32,7 @@ import fun.asgc.neutrino.core.context.NeutrinoLauncher;
* @date: 2022/6/16
*/
@EnableJob
@NeutrinoApplication
@NeutrinoApplication(environmentVariableKey = "NeutrinoProxyServer")
public class ProxyServer {
public static void main(String[] args) {