All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 相关函数 }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy