
com.hundsun.lightdb.unisql.model.UnisqlProperties Maven / Gradle / Ivy
package com.hundsun.lightdb.unisql.model;
import lombok.extern.slf4j.Slf4j;
/**
* 统一 SQL 系统参数与环境变量管理类,统一管理各类环境变量、系统参数
*
* @author yangrl14628
* @date 2023-07-19 10:17:53
*
* Copyright © 2023 Hundsun Technologies Inc. All Rights Reserved
*/
@Slf4j
public class UnisqlProperties {
/** single instance */
private static final UnisqlProperties INSTANCE = new UnisqlProperties();
// region 动态库相关常量
/** 代表动态库所在目录的 property */
private static final String PROP_LIB_DIR = "unisql.lib.dir";
/** 代表动态库所在目录的系统环境变量 */
private static final String ENV_LIB_DIR = "unisql_lib_dir";
/** 代表动态库所在目录的 property ,已弃用,应当用上面 lib 的 */
private static final String PROP_DLL_DIR_DEPRECATED = "unisql.dll.dir";
/** 代表动态库所在目录的系统环境变量,已弃用,应当用上面 lib 的 */
private static final String ENV_DLL_DIR_DEPRECATED = "unisql_dll_dir";
/** 定死操作系统架构名称 property,允许非标准操作系统的用户指定自己的操作系统架构名称 */
private static final String PROP_LIB_FULL_PATH = "unisql.lib.full-path";
/** 定死操作系统架构名称系统环境变量,允许非标准操作系统的用户指定自己的操作系统架构名称 */
private static final String ENV_LIB_FULL_PATH = "unisql_lib_full_path";
// endregion 动态库相关常量
// region 转换器性能参数相关常量
/** 环境变量 */
private static final String ENV_GOGC = "GOGC";
/** 环境变量 */
private static final String ENV_GOMEMLIMIT = "GOMEMLIMIT";
/** 缓存最大大小 */
private static final String PROP_UNISQL_CACHE_MAXIMUM_SIZE = "unisql.cache.maximum-size";
/** 缓存最大大小 驼峰 */
private static final String PROP_UNISQL_CACHE_MAXIMUM_SIZE_CAMEL = "unisql.cache.maximumSize";
/** 缓存过期时间 */
private static final String PROP_UNISQL_CACHE_EXPIRE_SECONDS = "unisql.cache.expire-seconds";
/** 缓存过期时间 驼峰 */
private static final String PROP_UNISQL_CACHE_EXPIRE_SECONDS_CAMEL = "unisql.cache.expireSeconds";
/** GOGC 参数,可指定 go gc 每次的增长比例 */
private static final String PROP_UNISQL_GO_GOGC = "unisql.go.gogc";
/** GOMEMLIMIT 参数,可指定 go 最大内存使用量,我们以 MB 为单位 */
private static final String PROP_UNISQL_GO_GOMEMLIMIT = "unisql.go.gomemlimit";
/** 默认缓存大小 */
private static final long DEFAULT_MAX_CACHE_SIZE = 10000;
/** 默认缓存过期时间 */
private static final long DEFAULT_EXPIRE_SECONDS = 900;
/** 默认 GOGC 大小 */
private static final long DEFAULT_GO_GOGC = 1000;
/** 默认 GOMEMLIMIT 大小,MB 为单位 */
private static final long DEFAULT_GO_GOMEMLIMIT = 256;
// endregion 转换器性能参数相关常量
// region Debug 与 Check 相关常量
/** 开启 debug 模式 */
private static final String PROP_UNISQL_DEBUG = "unisql.debug";
/** 是否开启对目标为 POSTGRESQL 的统一 SQL URL 的检查 */
private static final String PROP_UNISQL_CHECK_POSTGRESQL = "unisql.check.postgresql";
/** 是否开启对目标为 POSTGRESQL 的统一 SQL URL 的 schema 检查 */
private static final String PROP_UNISQL_CHECK_POSTGRESQL_SCHEMA = "unisql.check.postgresql.schema";
/** 是否开启对目标为 MYSQL 的统一 SQL URL 的检查 */
private static final String PROP_UNISQL_CHECK_MYSQL = "unisql.check.mysql";
/** 默认开启 debug 模式 */
private static final boolean DEFAULT_UNISQL_DEBUG = false;
/** 默认是否开启对目标为 POSTGRESQL 的统一 SQL URL 的检查 */
private static final boolean DEFAULT_UNISQL_CHECK_POSTGRESQL = true;
/** 默认是否开启对目标为 POSTGRESQL 的统一 SQL URL 的 schema 检查 */
private static final boolean DEFAULT_UNISQL_CHECK_POSTGRESQL_SCHEMA = true;
/** 默认是否开启对目标为 MYSQL 的统一 SQL URL 的检查 */
private static final boolean DEFAULT_UNISQL_CHECK_MYSQL = true;
// endregion Debug 与 Check 相关常量
/**
* get INSTANCE
*
* @return INSTANCE
*/
public static UnisqlProperties getInstance() {
return INSTANCE;
}
protected UnisqlProperties() {
}
/**
* 字符串为空
*
* @param str 字符串
* @return true 为空,false 不为空
*/
private boolean isEmpty(String str) {
return str == null || "".equals(str);
}
// region 动态库相关函数
/**
* 获取动态库完整路径配置
*
* @return 动态库完整路径配置,可能为空
*/
public String getLibFullPath() {
return System.getProperty(PROP_LIB_FULL_PATH, System.getenv(ENV_LIB_FULL_PATH));
}
/**
* 获取动态库搜索路径
*
* @return 动态库搜索路径,可能为空
*/
public String getLibDir() {
String configDir;
configDir = System.getProperty(PROP_LIB_DIR, System.getenv(ENV_LIB_DIR));
if (isEmpty(configDir)) {
configDir = System.getProperty(PROP_DLL_DIR_DEPRECATED, System.getenv(ENV_DLL_DIR_DEPRECATED));
if (configDir != null) {
log.warn("The property '{}' or the environment variable '{}' " +
"has been deprecated. Please use the property '{}' " +
"or the environment variable '{}' instead.",
PROP_DLL_DIR_DEPRECATED, ENV_DLL_DIR_DEPRECATED,
PROP_LIB_DIR, ENV_LIB_DIR);
}
}
return configDir;
}
// endregion 动态库相关函数
// region 转换器性能参数相关函数
/**
* 获取统一 SQL 缓存最大大小数字,默认 {@link #DEFAULT_MAX_CACHE_SIZE}
*
* @return 缓存大小
*/
public long getCacheMaximumSize() {
final long def = DEFAULT_MAX_CACHE_SIZE;
String using;
String str;
using = PROP_UNISQL_CACHE_MAXIMUM_SIZE;
str = System.getProperty(using);
if (isEmpty(str)) {
using = PROP_UNISQL_CACHE_MAXIMUM_SIZE_CAMEL;
str = System.getProperty(using);
}
if (isEmpty(str)) {
return def;
}
try {
return Long.parseLong(str);
} catch (Exception e) {
System.err.printf(
"System property '%s' value '%s' is not a valid number! Using default maximum cache size %d%n",
using, str, def);
return def;
}
}
/**
* 获取统一 SQL 缓存最大过期时长秒,默认 {@link #DEFAULT_EXPIRE_SECONDS}
*
* @return 缓存大小
*/
public long getCacheExpireSeconds() {
final long def = DEFAULT_EXPIRE_SECONDS;
String using;
String str;
using = PROP_UNISQL_CACHE_EXPIRE_SECONDS;
str = System.getProperty(using);
if (isEmpty(str)) {
using = PROP_UNISQL_CACHE_EXPIRE_SECONDS_CAMEL;
str = System.getProperty(using);
}
if (isEmpty(str)) {
return def;
}
try {
return Long.parseLong(str);
} catch (Exception e) {
System.err.printf(
"System property '%s' value '%s' is not a valid number! Using default cache expire seconds %d%n",
using, str, def);
return def;
}
}
/**
* 未设置 GOGC 环境变量
*
* @return 是否‘未设置 GOGC 环境变量’,true 无 GOGC,false 有 GOGC
*/
public boolean isEnvironmentGOGCNotSet() {
return System.getenv(ENV_GOGC) == null;
}
/**
* 获取统一 SQL 的 GOGC 配置
*
* @return GOGC 配置数值
*/
public long getGOGC() {
final long def = DEFAULT_GO_GOGC;
String str = System.getProperty(PROP_UNISQL_GO_GOGC);
if (isEmpty(str)) {
return def;
}
try {
return Long.parseLong(str);
} catch (Exception e) {
System.err.printf(
"System property '%s' value '%s' is not a valid number! Using default GOGC %d%n",
PROP_UNISQL_GO_GOGC, str, def);
return def;
}
}
/**
* 未设置 GOMEMLIMIT 环境变量
*
* @return 是否‘未设置 GOMEMLIMIT 环境变量’,true 无 GOMEMLIMIT,false 有 GOMEMLIMIT
*/
public boolean isEnvironmentGOMEMLIMITNotSet() {
return System.getenv(ENV_GOMEMLIMIT) == null;
}
/**
* 获取统一 SQL 的 GOMEMLIMIT 配置,注意以 MB 为单位
*
* @return GOMEMLIMIT 配置数值
*/
public long getGOMEMLIMIT() {
final long def = DEFAULT_GO_GOMEMLIMIT;
String str = System.getProperty(PROP_UNISQL_GO_GOMEMLIMIT);
if (isEmpty(str)) {
return def;
}
try {
return Long.parseLong(str);
} catch (Exception e) {
System.err.printf(
"System property '%s' value '%s' is not a valid number! Using default GOMEMLIMIT %d%n",
PROP_UNISQL_GO_GOMEMLIMIT, str, def);
return def;
}
}
// endregion 转换器性能参数相关函数
// region Debug 与 Check 相关函数
/**
* 是否开启 debug 模式
*
* @return debug 模式
*/
public boolean isDebug() {
final String got = System.getProperty(PROP_UNISQL_DEBUG);
if (isEmpty(got)) {
return DEFAULT_UNISQL_DEBUG;
}
return "true".equalsIgnoreCase(got.trim());
}
/**
* 是否开启对 POSTGRESQL 目标的统一 SQL 检查
*
* @return true 开启,false 不开启
*/
public boolean isCheckPostgreSQL() {
final String got = System.getProperty(PROP_UNISQL_CHECK_POSTGRESQL);
if (isEmpty(got)) {
return DEFAULT_UNISQL_CHECK_POSTGRESQL;
}
return "true".equalsIgnoreCase(got.trim());
}
/**
* 是否开启对 POSTGRESQL 目标的统一 SQL Schema 检查。
*
* 注意要与 {@link #isCheckPostgreSQL} 配套使用,若上面为 false ,则不要用这个继续判断
*
* @return true 开启,false 不开启
*/
public boolean isCheckPostgreSQLSchema() {
final String got = System.getProperty(PROP_UNISQL_CHECK_POSTGRESQL_SCHEMA);
if (isEmpty(got)) {
return DEFAULT_UNISQL_CHECK_POSTGRESQL_SCHEMA;
}
return "true".equalsIgnoreCase(got.trim());
}
/**
* 是否开启对 MYSQL 目标的统一 SQL 检查。
*
* @return true 开启,false 不开启
*/
public boolean isCheckMySQLSchema() {
final String got = System.getProperty(PROP_UNISQL_CHECK_MYSQL);
if (isEmpty(got)) {
return DEFAULT_UNISQL_CHECK_MYSQL;
}
return "true".equalsIgnoreCase(got.trim());
}
// endregion Debug 与 Check 相关函数
}