From c3f7bb571f4eb6d717caf35d2b34f5c7bc715587 Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Mon, 6 Mar 2023 18:52:40 +0800 Subject: [PATCH] =?UTF-8?q?Environment=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4=EF=BC=8C=E9=92=88=E5=AF=B95?= =?UTF-8?q?=E7=BA=A7=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/annotation/NeutrinoApplication.java | 1 + .../fun/asgc/neutrino/core/base/NvMap.java | 5 - .../fun/asgc/neutrino/core/base/NvMaps.java | 3 +- .../core/constant/MetaDataConstant.java | 33 +++++++ .../neutrino/core/context/Environment.java | 91 +++++++++++++++++++ .../core/context/NeutrinoLauncher.java | 8 +- .../asgc/neutrino/core/base/NvMapsTest.java | 5 +- .../src/test/resources/aaa.properties | 2 + .../neutrino/proxy/client/ProxyClient.java | 2 +- .../neutrino/proxy/server/ProxyServer.java | 2 +- 10 files changed, 141 insertions(+), 11 deletions(-) create mode 100644 neutrino-core/src/test/resources/aaa.properties diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/annotation/NeutrinoApplication.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/annotation/NeutrinoApplication.java index 91cf71ba..34d7fdad 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/annotation/NeutrinoApplication.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/annotation/NeutrinoApplication.java @@ -36,4 +36,5 @@ import java.lang.annotation.*; @NonIntercept public @interface NeutrinoApplication { String[] scanBasePackages() default {}; + String environmentVariableKey() default ""; } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMap.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMap.java index 9222021d..98f68d03 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMap.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMap.java @@ -24,7 +24,6 @@ import java.util.*; */ public class NvMap implements Map , Serializable, Cloneable { private HashMap aliasMap; - private HashMap reverseAliasMap; private LinkedHashMap _m; private HashMap _k; private Locale locale; @@ -46,7 +45,6 @@ public class NvMap implements Map , Serializable, Cloneable { public static NvMap of(NvMap parent) { NvMap nvMap = new NvMap(parent); nvMap.aliasMap.putAll(parent.aliasMap); - nvMap.reverseAliasMap.putAll(parent.reverseAliasMap); return nvMap; } @@ -67,7 +65,6 @@ public class NvMap implements Map , Serializable, Cloneable { public NvMap 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 implements Map , 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 implements Map , Serializable, Cloneable { res._m = (LinkedHashMap) _m.clone(); res._k = (HashMap) _k.clone(); res.aliasMap = (HashMap) aliasMap.clone(); - res.reverseAliasMap = (HashMap) reverseAliasMap.clone(); res.locale = locale; return res; } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMaps.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMaps.java index 4604939a..1ef1d76a 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMaps.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/base/NvMaps.java @@ -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; diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/constant/MetaDataConstant.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/constant/MetaDataConstant.java index 8b6d3ae7..2fe351cb 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/constant/MetaDataConstant.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/constant/MetaDataConstant.java @@ -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"; + } } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/Environment.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/Environment.java index a0224a90..7e810ce6 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/Environment.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/Environment.java @@ -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 mainArgsMap = null; + @Deprecated private Map 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); } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/NeutrinoLauncher.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/NeutrinoLauncher.java index ba35e6bb..5452600b 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/NeutrinoLauncher.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/NeutrinoLauncher.java @@ -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); + } + } /** diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/NvMapsTest.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/NvMapsTest.java index 20e75600..fda21521 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/NvMapsTest.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/base/NvMapsTest.java @@ -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:启动参数 diff --git a/neutrino-core/src/test/resources/aaa.properties b/neutrino-core/src/test/resources/aaa.properties new file mode 100644 index 00000000..ca8af323 --- /dev/null +++ b/neutrino-core/src/test/resources/aaa.properties @@ -0,0 +1,2 @@ +#neutrino.application.name=test +app-name=test1 \ No newline at end of file diff --git a/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/ProxyClient.java b/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/ProxyClient.java index 705cdaa4..f21cd846 100644 --- a/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/ProxyClient.java +++ b/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/ProxyClient.java @@ -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) { diff --git a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/ProxyServer.java b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/ProxyServer.java index a2d578e3..b0f4dda1 100644 --- a/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/ProxyServer.java +++ b/neutrino-proxy-server/src/main/java/fun/asgc/neutrino/proxy/server/ProxyServer.java @@ -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) {