diff --git a/CHANGELOG.md b/CHANGELOG.md index 469046fb5..2e053ea3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ## 5.0.4 ### 新特性 +* 【setting】 增加System.getenv变量替换支持 ### Bug修复 ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java b/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java index c1021cd7a..5a7f3eea3 100644 --- a/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java +++ b/hutool-setting/src/main/java/cn/hutool/setting/SettingLoader.java @@ -220,6 +220,11 @@ public class SettingLoader { if (null == varValue) { varValue = System.getProperty(key); } + // 环境变量中查找 + if (null == varValue) { + varValue = System.getenv(key); + } + if (null != varValue) { // 替换标识 value = value.replace(var, varValue); diff --git a/hutool-system/src/main/java/cn/hutool/system/SystemUtil.java b/hutool-system/src/main/java/cn/hutool/system/SystemUtil.java index 7c9416f8e..ee6c54ba2 100644 --- a/hutool-system/src/main/java/cn/hutool/system/SystemUtil.java +++ b/hutool-system/src/main/java/cn/hutool/system/SystemUtil.java @@ -21,116 +21,190 @@ import cn.hutool.core.util.StrUtil; /** * Java的System类封装工具类。
- * http://blog.csdn.net/zhongweijian/article/details/7619383 - * - * @author Looly + * 参考:http://blog.csdn.net/zhongweijian/article/details/7619383 * + * @author Looly */ public class SystemUtil { // ----- Java运行时环境信息 -----/ - /** Java 运行时环境规范名称的KEY */ + /** + * Java 运行时环境规范名称的KEY + */ public final static String SPECIFICATION_NAME = SystemPropsKeys.SPECIFICATION_NAME; - /** Java 运行时环境版本的KEY */ + /** + * Java 运行时环境版本的KEY + */ public final static String VERSION = SystemPropsKeys.VERSION; - /** Java 运行时环境规范版本的KEY */ + /** + * Java 运行时环境规范版本的KEY + */ public final static String SPECIFICATION_VERSION = SystemPropsKeys.SPECIFICATION_VERSION; - /** Java 运行时环境供应商的KEY */ + /** + * Java 运行时环境供应商的KEY + */ public final static String VENDOR = SystemPropsKeys.VENDOR; - /** Java 运行时环境规范供应商的KEY */ + /** + * Java 运行时环境规范供应商的KEY + */ public final static String SPECIFICATION_VENDOR = SystemPropsKeys.SPECIFICATION_VENDOR; - /** Java 供应商的 URL的KEY */ + /** + * Java 供应商的 URL的KEY + */ public final static String VENDOR_URL = SystemPropsKeys.VENDOR_URL; - /** Java 安装目录的KEY */ + /** + * Java 安装目录的KEY + */ public final static String HOME = SystemPropsKeys.HOME; - /** 加载库时搜索的路径列表的KEY */ + /** + * 加载库时搜索的路径列表的KEY + */ public final static String LIBRARY_PATH = SystemPropsKeys.LIBRARY_PATH; - /** 默认的临时文件路径的KEY */ + /** + * 默认的临时文件路径的KEY + */ public final static String TMPDIR = SystemPropsKeys.TMPDIR; - /** 要使用的 JIT 编译器的名称的KEY */ + /** + * 要使用的 JIT 编译器的名称的KEY + */ public final static String COMPILER = SystemPropsKeys.COMPILER; - /** 一个或多个扩展目录的路径的KEY */ + /** + * 一个或多个扩展目录的路径的KEY + */ public final static String EXT_DIRS = SystemPropsKeys.EXT_DIRS; // ----- Java虚拟机信息 -----/ - /** Java 虚拟机实现名称的KEY */ + /** + * Java 虚拟机实现名称的KEY + */ public final static String VM_NAME = SystemPropsKeys.VM_NAME; - /** Java 虚拟机规范名称的KEY */ + /** + * Java 虚拟机规范名称的KEY + */ public final static String VM_SPECIFICATION_NAME = SystemPropsKeys.VM_SPECIFICATION_NAME; - /** Java 虚拟机实现版本的KEY */ + /** + * Java 虚拟机实现版本的KEY + */ public final static String VM_VERSION = SystemPropsKeys.VM_VERSION; - /** Java 虚拟机规范版本的KEY */ + /** + * Java 虚拟机规范版本的KEY + */ public final static String VM_SPECIFICATION_VERSION = SystemPropsKeys.VM_SPECIFICATION_VERSION; - /** Java 虚拟机实现供应商的KEY */ + /** + * Java 虚拟机实现供应商的KEY + */ public final static String VM_VENDOR = SystemPropsKeys.VM_VENDOR; - /** Java 虚拟机规范供应商的KEY */ + /** + * Java 虚拟机规范供应商的KEY + */ public final static String VM_SPECIFICATION_VENDOR = SystemPropsKeys.VM_SPECIFICATION_VENDOR; // ----- Java类信息 -----/ - /** Java 类格式版本号的KEY */ + /** + * Java 类格式版本号的KEY + */ public final static String CLASS_VERSION = SystemPropsKeys.CLASS_VERSION; - /** Java 类路径的KEY */ + /** + * Java 类路径的KEY + */ public final static String CLASS_PATH = SystemPropsKeys.CLASS_PATH; // ----- OS信息 -----/ - /** 操作系统的名称的KEY */ + /** + * 操作系统的名称的KEY + */ public final static String OS_NAME = SystemPropsKeys.OS_NAME; - /** 操作系统的架构的KEY */ + /** + * 操作系统的架构的KEY + */ public final static String OS_ARCH = SystemPropsKeys.OS_ARCH; - /** 操作系统的版本的KEY */ + /** + * 操作系统的版本的KEY + */ public final static String OS_VERSION = SystemPropsKeys.OS_VERSION; - /** 文件分隔符(在 UNIX 系统中是“/”)的KEY */ + /** + * 文件分隔符(在 UNIX 系统中是“/”)的KEY + */ public final static String FILE_SEPARATOR = SystemPropsKeys.FILE_SEPARATOR; - /** 路径分隔符(在 UNIX 系统中是“:”)的KEY */ + /** + * 路径分隔符(在 UNIX 系统中是“:”)的KEY + */ public final static String PATH_SEPARATOR = SystemPropsKeys.PATH_SEPARATOR; - /** 行分隔符(在 UNIX 系统中是“\n”)的KEY */ + /** + * 行分隔符(在 UNIX 系统中是“\n”)的KEY + */ public final static String LINE_SEPARATOR = SystemPropsKeys.LINE_SEPARATOR; // ----- 用户信息 -----/ - /** 用户的账户名称的KEY */ + /** + * 用户的账户名称的KEY + */ public final static String USER_NAME = SystemPropsKeys.USER_NAME; - /** 用户的主目录的KEY */ + /** + * 用户的主目录的KEY + */ public final static String USER_HOME = SystemPropsKeys.USER_HOME; - /** 用户的当前工作目录的KEY */ + /** + * 用户的当前工作目录的KEY + */ public final static String USER_DIR = SystemPropsKeys.USER_DIR; // ----------------------------------------------------------------------- Basic start /** - * 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 null。 - * - * @param name 属性名 + * 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 defaultValue + * + * @param name 属性名 * @param defaultValue 默认值 - * @return 属性值或null + * @return 属性值或defaultValue + * @see System#getProperty(String) + * @see System#getenv(String) */ public static String get(String name, String defaultValue) { return StrUtil.nullToDefault(get(name, false), defaultValue); } /** - * 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 null。 - * - * @param name 属性名 + * 取得系统属性,如果因为Java安全的限制而失败,则将错误打在Log中,然后返回 {@code null} + * + * @param name 属性名 * @param quiet 安静模式,不将出错信息打在System.err中 - * - * @return 属性值或null + * @return 属性值或{@code null} + * @see System#getProperty(String) + * @see System#getenv(String) */ public static String get(String name, boolean quiet) { + String value = null; try { - return System.getProperty(name); + value = System.getProperty(name); } catch (SecurityException e) { if (false == quiet) { - Console.error("Caught a SecurityException reading the system property '{}'; the SystemUtil property value will default to null.", name); + Console.error("Caught a SecurityException reading the system property '{}'; " + + "the SystemUtil property value will default to null.", name); } - return null; } + + if (null == value) { + try { + value = System.getenv(name); + } catch (SecurityException e) { + if (false == quiet) { + Console.error("Caught a SecurityException reading the system env '{}'; " + + "the SystemUtil env value will default to null.", name); + } + } + } + + return value; } /** - * 获得System属性(调用System.getProperty) - * + * 获得System属性 + * * @param key 键 * @return 属性值 + * @see System#getProperty(String) + * @see System#getenv(String) */ public static String get(String key) { return get(key, null); @@ -138,8 +212,8 @@ public class SystemUtil { /** * 获得boolean类型值 - * - * @param key 键 + * + * @param key 键 * @param defaultValue 默认值 * @return 值 */ @@ -154,21 +228,13 @@ public class SystemUtil { return true; } - if ("true".equals(value) || "yes".equals(value) || "1".equals(value)) { - return true; - } - - if ("false".equals(value) || "no".equals(value) || "0".equals(value)) { - return false; - } - - return defaultValue; + return Convert.toBool(value, defaultValue); } /** * 获得int类型值 - * - * @param key 键 + * + * @param key 键 * @param defaultValue 默认值 * @return 值 */ @@ -178,8 +244,8 @@ public class SystemUtil { /** * 获得long类型值 - * - * @param key 键 + * + * @param key 键 * @param defaultValue 默认值 * @return 值 */ @@ -196,7 +262,7 @@ public class SystemUtil { /** * 获取当前进程 PID - * + * * @return 当前进程 ID */ public static long getCurrentPID() { @@ -266,34 +332,29 @@ public class SystemUtil { } /** - * Returns a list of {@link MemoryPoolMXBean} objects in the Java virtual machine.
+ * 获取Java虚拟机中的{@link MemoryPoolMXBean}列表
* The Java virtual machine can have one or more memory pools. It may add or remove memory pools during execution. * * @return a list of MemoryPoolMXBean objects. - * */ public static List getMemoryPoolMXBeans() { return ManagementFactory.getMemoryPoolMXBeans(); } /** - * Returns a list of {@link MemoryManagerMXBean} objects in the Java virtual machine.
+ * 获取Java虚拟机中的{@link MemoryManagerMXBean}列表
* The Java virtual machine can have one or more memory managers. It may add or remove memory managers during execution. * * @return a list of MemoryManagerMXBean objects. - * */ public static List getMemoryManagerMXBeans() { return ManagementFactory.getMemoryManagerMXBeans(); } /** - * Returns a list of {@link GarbageCollectorMXBean} objects in the Java virtual machine.
- * The Java virtual machine may have one or more GarbageCollectorMXBean objects.
- * It may add or remove GarbageCollectorMXBean during execution. - * - * @return a list of GarbageCollectorMXBean objects. + * 获取Java虚拟机中的{@link GarbageCollectorMXBean}列表 * + * @return {@link GarbageCollectorMXBean}列表 */ public static List getGarbageCollectorMXBeans() { return ManagementFactory.getGarbageCollectorMXBeans(); @@ -301,7 +362,7 @@ public class SystemUtil { /** * 取得Java Virtual Machine Specification的信息。 - * + * * @return JvmSpecInfo对象 */ public static JvmSpecInfo getJvmSpecInfo() { @@ -310,7 +371,7 @@ public class SystemUtil { /** * 取得Java Virtual Machine Implementation的信息。 - * + * * @return JvmInfo对象 */ public static JvmInfo getJvmInfo() { @@ -319,7 +380,7 @@ public class SystemUtil { /** * 取得Java Specification的信息。 - * + * * @return JavaSpecInfo对象 */ public static JavaSpecInfo getJavaSpecInfo() { @@ -328,7 +389,7 @@ public class SystemUtil { /** * 取得Java Implementation的信息。 - * + * * @return JavaInfo对象 */ public static JavaInfo getJavaInfo() { @@ -337,7 +398,7 @@ public class SystemUtil { /** * 取得当前运行的JRE的信息。 - * + * * @return JreInfo对象 */ public static JavaRuntimeInfo getJavaRuntimeInfo() { @@ -346,7 +407,7 @@ public class SystemUtil { /** * 取得OS的信息。 - * + * * @return OsInfo对象 */ public static OsInfo getOsInfo() { @@ -355,7 +416,7 @@ public class SystemUtil { /** * 取得User的信息。 - * + * * @return UserInfo对象 */ public static UserInfo getUserInfo() { @@ -364,7 +425,7 @@ public class SystemUtil { /** * 取得Host的信息。 - * + * * @return HostInfo对象 */ public static HostInfo getHostInfo() { @@ -373,7 +434,7 @@ public class SystemUtil { /** * 取得Runtime的信息。 - * + * * @return RuntimeInfo对象 */ public static RuntimeInfo getRuntimeInfo() { @@ -382,7 +443,7 @@ public class SystemUtil { /** * 获取JVM中内存总大小 - * + * * @return 内存总大小 * @since 4.5.4 */ @@ -392,7 +453,7 @@ public class SystemUtil { /** * 获取JVM中内存剩余大小 - * + * * @return 内存剩余大小 * @since 4.5.4 */ @@ -402,7 +463,7 @@ public class SystemUtil { /** * 获取JVM可用的内存总大小 - * + * * @return JVM可用的内存总大小 * @since 4.5.4 */ @@ -412,18 +473,19 @@ public class SystemUtil { /** * 获取总线程数 - * + * * @return 总线程数 */ public static int getTotalThreadCount() { ThreadGroup parentThread = Thread.currentThread().getThreadGroup(); - while(null != parentThread.getParent()) { + while (null != parentThread.getParent()) { parentThread = parentThread.getParent(); } return parentThread.activeCount(); } // ------------------------------------------------------------------ Dump + /** * 将系统信息输出到System.out中。 */ @@ -433,7 +495,7 @@ public class SystemUtil { /** * 将系统信息输出到指定PrintWriter中。 - * + * * @param out PrintWriter输出流 */ public static void dumpSystemInfo(PrintWriter out) { @@ -461,10 +523,10 @@ public class SystemUtil { /** * 输出到StringBuilder。 - * + * * @param builder StringBuilder对象 * @param caption 标题 - * @param value 值 + * @param value 值 */ protected static void append(StringBuilder builder, String caption, Object value) { builder.append(caption).append(StrUtil.nullToDefault(Convert.toStr(value), "[n/a]")).append("\n");