support env

This commit is contained in:
Looly 2019-10-27 07:55:12 +08:00
parent 9dabb0fd9f
commit a965845dcc
3 changed files with 155 additions and 87 deletions

View File

@ -6,6 +6,7 @@
## 5.0.4 ## 5.0.4
### 新特性 ### 新特性
* 【setting】 增加System.getenv变量替换支持
### Bug修复 ### Bug修复
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------

View File

@ -220,6 +220,11 @@ public class SettingLoader {
if (null == varValue) { if (null == varValue) {
varValue = System.getProperty(key); varValue = System.getProperty(key);
} }
// 环境变量中查找
if (null == varValue) {
varValue = System.getenv(key);
}
if (null != varValue) { if (null != varValue) {
// 替换标识 // 替换标识
value = value.replace(var, varValue); value = value.replace(var, varValue);

View File

@ -21,116 +21,190 @@ import cn.hutool.core.util.StrUtil;
/** /**
* Java的System类封装工具类<br> * Java的System类封装工具类<br>
* http://blog.csdn.net/zhongweijian/article/details/7619383 * 参考http://blog.csdn.net/zhongweijian/article/details/7619383
* *
* @author Looly * @author Looly
*
*/ */
public class SystemUtil { public class SystemUtil {
// ----- Java运行时环境信息 -----/ // ----- Java运行时环境信息 -----/
/** Java 运行时环境规范名称的KEY */ /**
* Java 运行时环境规范名称的KEY
*/
public final static String SPECIFICATION_NAME = SystemPropsKeys.SPECIFICATION_NAME; public final static String SPECIFICATION_NAME = SystemPropsKeys.SPECIFICATION_NAME;
/** Java 运行时环境版本的KEY */ /**
* Java 运行时环境版本的KEY
*/
public final static String VERSION = SystemPropsKeys.VERSION; public final static String VERSION = SystemPropsKeys.VERSION;
/** Java 运行时环境规范版本的KEY */ /**
* Java 运行时环境规范版本的KEY
*/
public final static String SPECIFICATION_VERSION = SystemPropsKeys.SPECIFICATION_VERSION; public final static String SPECIFICATION_VERSION = SystemPropsKeys.SPECIFICATION_VERSION;
/** Java 运行时环境供应商的KEY */ /**
* Java 运行时环境供应商的KEY
*/
public final static String VENDOR = SystemPropsKeys.VENDOR; public final static String VENDOR = SystemPropsKeys.VENDOR;
/** Java 运行时环境规范供应商的KEY */ /**
* Java 运行时环境规范供应商的KEY
*/
public final static String SPECIFICATION_VENDOR = SystemPropsKeys.SPECIFICATION_VENDOR; public final static String SPECIFICATION_VENDOR = SystemPropsKeys.SPECIFICATION_VENDOR;
/** Java 供应商的 URL的KEY */ /**
* Java 供应商的 URL的KEY
*/
public final static String VENDOR_URL = SystemPropsKeys.VENDOR_URL; public final static String VENDOR_URL = SystemPropsKeys.VENDOR_URL;
/** Java 安装目录的KEY */ /**
* Java 安装目录的KEY
*/
public final static String HOME = SystemPropsKeys.HOME; public final static String HOME = SystemPropsKeys.HOME;
/** 加载库时搜索的路径列表的KEY */ /**
* 加载库时搜索的路径列表的KEY
*/
public final static String LIBRARY_PATH = SystemPropsKeys.LIBRARY_PATH; public final static String LIBRARY_PATH = SystemPropsKeys.LIBRARY_PATH;
/** 默认的临时文件路径的KEY */ /**
* 默认的临时文件路径的KEY
*/
public final static String TMPDIR = SystemPropsKeys.TMPDIR; public final static String TMPDIR = SystemPropsKeys.TMPDIR;
/** 要使用的 JIT 编译器的名称的KEY */ /**
* 要使用的 JIT 编译器的名称的KEY
*/
public final static String COMPILER = SystemPropsKeys.COMPILER; public final static String COMPILER = SystemPropsKeys.COMPILER;
/** 一个或多个扩展目录的路径的KEY */ /**
* 一个或多个扩展目录的路径的KEY
*/
public final static String EXT_DIRS = SystemPropsKeys.EXT_DIRS; public final static String EXT_DIRS = SystemPropsKeys.EXT_DIRS;
// ----- Java虚拟机信息 -----/ // ----- Java虚拟机信息 -----/
/** Java 虚拟机实现名称的KEY */ /**
* Java 虚拟机实现名称的KEY
*/
public final static String VM_NAME = SystemPropsKeys.VM_NAME; public final static String VM_NAME = SystemPropsKeys.VM_NAME;
/** Java 虚拟机规范名称的KEY */ /**
* Java 虚拟机规范名称的KEY
*/
public final static String VM_SPECIFICATION_NAME = SystemPropsKeys.VM_SPECIFICATION_NAME; public final static String VM_SPECIFICATION_NAME = SystemPropsKeys.VM_SPECIFICATION_NAME;
/** Java 虚拟机实现版本的KEY */ /**
* Java 虚拟机实现版本的KEY
*/
public final static String VM_VERSION = SystemPropsKeys.VM_VERSION; public final static String VM_VERSION = SystemPropsKeys.VM_VERSION;
/** Java 虚拟机规范版本的KEY */ /**
* Java 虚拟机规范版本的KEY
*/
public final static String VM_SPECIFICATION_VERSION = SystemPropsKeys.VM_SPECIFICATION_VERSION; public final static String VM_SPECIFICATION_VERSION = SystemPropsKeys.VM_SPECIFICATION_VERSION;
/** Java 虚拟机实现供应商的KEY */ /**
* Java 虚拟机实现供应商的KEY
*/
public final static String VM_VENDOR = SystemPropsKeys.VM_VENDOR; public final static String VM_VENDOR = SystemPropsKeys.VM_VENDOR;
/** Java 虚拟机规范供应商的KEY */ /**
* Java 虚拟机规范供应商的KEY
*/
public final static String VM_SPECIFICATION_VENDOR = SystemPropsKeys.VM_SPECIFICATION_VENDOR; public final static String VM_SPECIFICATION_VENDOR = SystemPropsKeys.VM_SPECIFICATION_VENDOR;
// ----- Java类信息 -----/ // ----- Java类信息 -----/
/** Java 类格式版本号的KEY */ /**
* Java 类格式版本号的KEY
*/
public final static String CLASS_VERSION = SystemPropsKeys.CLASS_VERSION; public final static String CLASS_VERSION = SystemPropsKeys.CLASS_VERSION;
/** Java 类路径的KEY */ /**
* Java 类路径的KEY
*/
public final static String CLASS_PATH = SystemPropsKeys.CLASS_PATH; public final static String CLASS_PATH = SystemPropsKeys.CLASS_PATH;
// ----- OS信息 -----/ // ----- OS信息 -----/
/** 操作系统的名称的KEY */ /**
* 操作系统的名称的KEY
*/
public final static String OS_NAME = SystemPropsKeys.OS_NAME; public final static String OS_NAME = SystemPropsKeys.OS_NAME;
/** 操作系统的架构的KEY */ /**
* 操作系统的架构的KEY
*/
public final static String OS_ARCH = SystemPropsKeys.OS_ARCH; public final static String OS_ARCH = SystemPropsKeys.OS_ARCH;
/** 操作系统的版本的KEY */ /**
* 操作系统的版本的KEY
*/
public final static String OS_VERSION = SystemPropsKeys.OS_VERSION; public final static String OS_VERSION = SystemPropsKeys.OS_VERSION;
/** 文件分隔符(在 UNIX 系统中是“/”的KEY */ /**
* 文件分隔符 UNIX 系统中是/的KEY
*/
public final static String FILE_SEPARATOR = SystemPropsKeys.FILE_SEPARATOR; public final static String FILE_SEPARATOR = SystemPropsKeys.FILE_SEPARATOR;
/** 路径分隔符(在 UNIX 系统中是“:”的KEY */ /**
* 路径分隔符 UNIX 系统中是:的KEY
*/
public final static String PATH_SEPARATOR = SystemPropsKeys.PATH_SEPARATOR; public final static String PATH_SEPARATOR = SystemPropsKeys.PATH_SEPARATOR;
/** 行分隔符(在 UNIX 系统中是“\n”的KEY */ /**
* 行分隔符 UNIX 系统中是\n的KEY
*/
public final static String LINE_SEPARATOR = SystemPropsKeys.LINE_SEPARATOR; public final static String LINE_SEPARATOR = SystemPropsKeys.LINE_SEPARATOR;
// ----- 用户信息 -----/ // ----- 用户信息 -----/
/** 用户的账户名称的KEY */ /**
* 用户的账户名称的KEY
*/
public final static String USER_NAME = SystemPropsKeys.USER_NAME; public final static String USER_NAME = SystemPropsKeys.USER_NAME;
/** 用户的主目录的KEY */ /**
* 用户的主目录的KEY
*/
public final static String USER_HOME = SystemPropsKeys.USER_HOME; public final static String USER_HOME = SystemPropsKeys.USER_HOME;
/** 用户的当前工作目录的KEY */ /**
* 用户的当前工作目录的KEY
*/
public final static String USER_DIR = SystemPropsKeys.USER_DIR; public final static String USER_DIR = SystemPropsKeys.USER_DIR;
// ----------------------------------------------------------------------- Basic start // ----------------------------------------------------------------------- Basic start
/** /**
* 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 <code>null</code> * 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 defaultValue
* *
* @param name 属性名 * @param name 属性名
* @param defaultValue 默认值 * @param defaultValue 默认值
* @return 属性值或<code>null</code> * @return 属性值或defaultValue
* @see System#getProperty(String)
* @see System#getenv(String)
*/ */
public static String get(String name, String defaultValue) { public static String get(String name, String defaultValue) {
return StrUtil.nullToDefault(get(name, false), defaultValue); return StrUtil.nullToDefault(get(name, false), defaultValue);
} }
/** /**
* 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 <code>null</code> * 取得系统属性如果因为Java安全的限制而失败则将错误打在Log中然后返回 {@code null}
* *
* @param name 属性名 * @param name 属性名
* @param quiet 安静模式不将出错信息打在<code>System.err</code> * @param quiet 安静模式不将出错信息打在<code>System.err</code>
* * @return 属性值或{@code null}
* @return 属性值或<code>null</code> * @see System#getProperty(String)
* @see System#getenv(String)
*/ */
public static String get(String name, boolean quiet) { public static String get(String name, boolean quiet) {
String value = null;
try { try {
return System.getProperty(name); value = System.getProperty(name);
} catch (SecurityException e) { } catch (SecurityException e) {
if (false == quiet) { 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 * @param key
* @return 属性值 * @return 属性值
* @see System#getProperty(String)
* @see System#getenv(String)
*/ */
public static String get(String key) { public static String get(String key) {
return get(key, null); return get(key, null);
@ -139,7 +213,7 @@ public class SystemUtil {
/** /**
* 获得boolean类型值 * 获得boolean类型值
* *
* @param key * @param key
* @param defaultValue 默认值 * @param defaultValue 默认值
* @return * @return
*/ */
@ -154,21 +228,13 @@ public class SystemUtil {
return true; return true;
} }
if ("true".equals(value) || "yes".equals(value) || "1".equals(value)) { return Convert.toBool(value, defaultValue);
return true;
}
if ("false".equals(value) || "no".equals(value) || "0".equals(value)) {
return false;
}
return defaultValue;
} }
/** /**
* 获得int类型值 * 获得int类型值
* *
* @param key * @param key
* @param defaultValue 默认值 * @param defaultValue 默认值
* @return * @return
*/ */
@ -179,7 +245,7 @@ public class SystemUtil {
/** /**
* 获得long类型值 * 获得long类型值
* *
* @param key * @param key
* @param defaultValue 默认值 * @param defaultValue 默认值
* @return * @return
*/ */
@ -266,34 +332,29 @@ public class SystemUtil {
} }
/** /**
* Returns a list of {@link MemoryPoolMXBean} objects in the Java virtual machine. <br> * 获取Java虚拟机中的{@link MemoryPoolMXBean}列表<br>
* The Java virtual machine can have one or more memory pools. It may add or remove memory pools during execution. * The Java virtual machine can have one or more memory pools. It may add or remove memory pools during execution.
* *
* @return a list of <tt>MemoryPoolMXBean</tt> objects. * @return a list of <tt>MemoryPoolMXBean</tt> objects.
*
*/ */
public static List<MemoryPoolMXBean> getMemoryPoolMXBeans() { public static List<MemoryPoolMXBean> getMemoryPoolMXBeans() {
return ManagementFactory.getMemoryPoolMXBeans(); return ManagementFactory.getMemoryPoolMXBeans();
} }
/** /**
* Returns a list of {@link MemoryManagerMXBean} objects in the Java virtual machine. <br> * 获取Java虚拟机中的{@link MemoryManagerMXBean}列表<br>
* The Java virtual machine can have one or more memory managers. It may add or remove memory managers during execution. * The Java virtual machine can have one or more memory managers. It may add or remove memory managers during execution.
* *
* @return a list of <tt>MemoryManagerMXBean</tt> objects. * @return a list of <tt>MemoryManagerMXBean</tt> objects.
*
*/ */
public static List<MemoryManagerMXBean> getMemoryManagerMXBeans() { public static List<MemoryManagerMXBean> getMemoryManagerMXBeans() {
return ManagementFactory.getMemoryManagerMXBeans(); return ManagementFactory.getMemoryManagerMXBeans();
} }
/** /**
* Returns a list of {@link GarbageCollectorMXBean} objects in the Java virtual machine. <br> * 获取Java虚拟机中的{@link GarbageCollectorMXBean}列表
* The Java virtual machine may have one or more <tt>GarbageCollectorMXBean</tt> objects. <br>
* It may add or remove <tt>GarbageCollectorMXBean</tt> during execution.
*
* @return a list of <tt>GarbageCollectorMXBean</tt> objects.
* *
* @return {@link GarbageCollectorMXBean}列表
*/ */
public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() { public static List<GarbageCollectorMXBean> getGarbageCollectorMXBeans() {
return ManagementFactory.getGarbageCollectorMXBeans(); return ManagementFactory.getGarbageCollectorMXBeans();
@ -417,13 +478,14 @@ public class SystemUtil {
*/ */
public static int getTotalThreadCount() { public static int getTotalThreadCount() {
ThreadGroup parentThread = Thread.currentThread().getThreadGroup(); ThreadGroup parentThread = Thread.currentThread().getThreadGroup();
while(null != parentThread.getParent()) { while (null != parentThread.getParent()) {
parentThread = parentThread.getParent(); parentThread = parentThread.getParent();
} }
return parentThread.activeCount(); return parentThread.activeCount();
} }
// ------------------------------------------------------------------ Dump // ------------------------------------------------------------------ Dump
/** /**
* 将系统信息输出到<code>System.out</code> * 将系统信息输出到<code>System.out</code>
*/ */
@ -464,7 +526,7 @@ public class SystemUtil {
* *
* @param builder <code>StringBuilder</code>对象 * @param builder <code>StringBuilder</code>对象
* @param caption 标题 * @param caption 标题
* @param value * @param value
*/ */
protected static void append(StringBuilder builder, String caption, Object value) { protected static void append(StringBuilder builder, String caption, Object value) {
builder.append(caption).append(StrUtil.nullToDefault(Convert.toStr(value), "[n/a]")).append("\n"); builder.append(caption).append(StrUtil.nullToDefault(Convert.toStr(value), "[n/a]")).append("\n");