重构Main类
This commit is contained in:
295
src/Main.java
295
src/Main.java
@@ -1,295 +0,0 @@
|
||||
import cc.winboll.LogUtils;
|
||||
import cc.winboll.auth.MailAuthUtils;
|
||||
import cc.winboll.service.AuthCenterHttpService;
|
||||
import cc.winboll.util.ConsoleInputUtils;
|
||||
import cc.winboll.util.EmailSendUtils;
|
||||
import cc.winboll.util.EnvInfoUtils;
|
||||
import cc.winboll.util.IniConfigUtils;
|
||||
import cc.winboll.util.InitCheckUtils;
|
||||
import cc.winboll.util.ServerUtils;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 程序入口类,负责初始化运行环境检测与AuthCenter HTTP服务启动
|
||||
* 适配Java7语言规范,兼容Android API30运行环境,支持优雅停机
|
||||
* 启动参数规则:1. -detail(可选,显示详细环境信息) 2. 服务器地址(可选,覆盖默认/INI配置)
|
||||
* 支持控制台输入交互,输入help查帮助、输入exit退出、其他指令提示未识别
|
||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||
* @Date 2026/01/14 00:00:00
|
||||
* @LastEditTime 2026/01/18 10:00:00
|
||||
*/
|
||||
public class Main {
|
||||
// 全局静态属性(常量→变量,顺序清晰)
|
||||
private static final String TAG = "AuthCenterMain";
|
||||
private static final String DEFAULT_SERVER_URL = "http://localhost:8080";
|
||||
private static final String ARG_DETAIL = "-detail";
|
||||
private static final String INI_SERVER_SECTION = "ServerConfig";
|
||||
private static final String INI_SERVER_KEY = "server_base_url";
|
||||
// 新增:HTTP端口配置项,读取INI适配灵活性
|
||||
private static final String INI_HTTP_SECTION = "HttpServiceConfig";
|
||||
private static final String INI_HTTP_PORT_KEY = "http_server_port";
|
||||
private static final int DEFAULT_HTTP_PORT = 8080;
|
||||
private static AuthCenterHttpService httpService;
|
||||
private static int httpPort; // 全局HTTP端口变量
|
||||
|
||||
/**
|
||||
* 程序主入口方法,统一调度初始化、服务启动、常驻阻塞全流程
|
||||
* @param args 启动参数,支持-detail(详细环境)、自定义服务器地址
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
IniConfigUtils.loadRootConfig();
|
||||
LogUtils.d(TAG, "【函数调用】main(),传入参数:" + arrayToString(args));
|
||||
|
||||
boolean showDetailEnv = parseDetailArg(args);
|
||||
String serverUrl = getFinalServerUrl(args);
|
||||
httpPort = getHttpPortFromConfig(); // 新增:读取HTTP端口配置
|
||||
|
||||
EnvInfoUtils.printEnvReport(showDetailEnv);
|
||||
initServerUtils(serverUrl);
|
||||
// 新增:先初始化邮件配置,保障邮件校验能读取到完整配置
|
||||
EmailSendUtils.initEmailConfig();
|
||||
|
||||
// 启动初始化校验(邮件+服务器)
|
||||
boolean initCheckPass = InitCheckUtils.checkAllInitConfig();
|
||||
if (!initCheckPass) {
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
System.out.println("Hello World!");
|
||||
|
||||
startAuthCenterHttpService();
|
||||
ConsoleInputUtils.initConsoleScanner();
|
||||
consoleBlockForService();
|
||||
|
||||
releaseAllResources();
|
||||
LogUtils.i(TAG, "【函数结束】main(),程序正常退出");
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增:从INI读取HTTP端口,无配置兜底默认8080
|
||||
*/
|
||||
private static int getHttpPortFromConfig() {
|
||||
LogUtils.d(TAG, "【函数调用】getHttpPortFromConfig(),读取HTTP服务端口配置");
|
||||
String portStr = IniConfigUtils.getConfigValue(INI_HTTP_SECTION, INI_HTTP_PORT_KEY);
|
||||
if (portStr == null || portStr.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "未读取到HTTP端口配置,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
try {
|
||||
int port = Integer.parseInt(portStr.trim());
|
||||
if (port > 0 && port <= 65535) {
|
||||
LogUtils.i(TAG, "从INI读取HTTP端口成功:" + port);
|
||||
return port;
|
||||
} else {
|
||||
LogUtils.w(TAG, "HTTP端口配置非法,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogUtils.w(TAG, "HTTP端口配置解析失败,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析启动参数,判断是否输出详细环境信息
|
||||
* @param args 启动参数数组
|
||||
* @return true=显示详细信息,false=显示精简信息
|
||||
*/
|
||||
private static boolean parseDetailArg(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】parseDetailArg(),入参args:" + arrayToString(args));
|
||||
if (args == null || args.length == 0) {
|
||||
LogUtils.d(TAG, "【函数返回】parseDetailArg(),无启动参数,返回false");
|
||||
return false;
|
||||
}
|
||||
|
||||
for (String arg : args) {
|
||||
String trimArg = arg.trim();
|
||||
if (ARG_DETAIL.equalsIgnoreCase(trimArg)) {
|
||||
LogUtils.i(TAG, "【参数检测】匹配-detail参数,将输出详细环境信息");
|
||||
LogUtils.d(TAG, "【函数返回】parseDetailArg(),匹配参数成功,返回true");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
LogUtils.d(TAG, "【函数返回】parseDetailArg(),未匹配-detail参数,返回false");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 整合多来源服务器地址,优先级 启动参数 > INI配置 > 默认地址,适配config.ini
|
||||
* @param args 启动参数数组
|
||||
* @return 最终生效的服务器地址
|
||||
*/
|
||||
private static String getFinalServerUrl(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】getFinalServerUrl(),整合服务器地址(启动参数>INI>默认)");
|
||||
String argUrl = parseServerUrlArg(args);
|
||||
if (argUrl != null && !argUrl.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "服务器地址优先级1:启动参数 → " + argUrl);
|
||||
return argUrl;
|
||||
}
|
||||
String iniUrl = IniConfigUtils.getConfigValue(INI_SERVER_SECTION, INI_SERVER_KEY);
|
||||
if (iniUrl != null && !iniUrl.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "服务器地址优先级2:INI配置 → " + iniUrl);
|
||||
return iniUrl;
|
||||
}
|
||||
LogUtils.i(TAG, "服务器地址优先级3:默认地址 → " + DEFAULT_SERVER_URL);
|
||||
return DEFAULT_SERVER_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从启动参数提取自定义服务器地址,非-detail参数均视为服务器地址
|
||||
* @param args 启动参数数组
|
||||
* @return 解析到的地址,无则返回null
|
||||
*/
|
||||
private static String parseServerUrlArg(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】parseServerUrlArg(),入参args:" + arrayToString(args));
|
||||
if (args == null || args.length == 0) {
|
||||
LogUtils.d(TAG, "【函数返回】无启动参数,返回null");
|
||||
return null;
|
||||
}
|
||||
|
||||
for (String arg : args) {
|
||||
String trimArg = arg.trim();
|
||||
if (!ARG_DETAIL.equalsIgnoreCase(trimArg) && !trimArg.isEmpty()) {
|
||||
LogUtils.i(TAG, "【参数检测】匹配自定义服务器地址,覆盖默认值:" + trimArg);
|
||||
LogUtils.d(TAG, "【函数返回】解析到地址,返回:" + trimArg);
|
||||
return trimArg;
|
||||
}
|
||||
}
|
||||
|
||||
LogUtils.d(TAG, "【函数返回】未解析到自定义地址,返回null");
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化服务器交互工具类,自动补全HTTP协议头,保障地址有效性
|
||||
* @param serverUrl 初始服务器地址(可无协议头)
|
||||
*/
|
||||
private static void initServerUtils(String serverUrl) {
|
||||
LogUtils.d(TAG, "【函数调用】initServerUtils(),入参初始服务器地址:" + serverUrl);
|
||||
String finalServerUrl = completeServerUrlProtocol(serverUrl);
|
||||
|
||||
ServerUtils.initServerUrl(finalServerUrl);
|
||||
System.out.println("✅ ServerUtils 初始化完成,当前服务器地址:" + finalServerUrl);
|
||||
|
||||
LogUtils.d(TAG, "【函数结束】initServerUtils(),服务器交互工具初始化就绪");
|
||||
}
|
||||
|
||||
/**
|
||||
* 补全服务器地址HTTP/HTTPS协议头,避免无效地址,提升兼容性
|
||||
* @param url 原始服务器地址
|
||||
* @return 补全协议头后的合法地址
|
||||
*/
|
||||
private static String completeServerUrlProtocol(String url) {
|
||||
LogUtils.d(TAG, "【函数调用】completeServerUrlProtocol(),入参原始地址:" + url);
|
||||
if (url == null || url.trim().isEmpty()) {
|
||||
LogUtils.w(TAG, "原始地址为空,使用默认服务器地址:" + DEFAULT_SERVER_URL);
|
||||
LogUtils.d(TAG, "【函数返回】completeServerUrlProtocol(),返回默认地址:" + DEFAULT_SERVER_URL);
|
||||
return DEFAULT_SERVER_URL;
|
||||
}
|
||||
|
||||
String trimUrl = url.trim();
|
||||
if (trimUrl.startsWith("http://") || trimUrl.startsWith("https://")) {
|
||||
LogUtils.d(TAG, "【函数返回】completeServerUrlProtocol(),地址协议头完整,返回原地址:" + trimUrl);
|
||||
return trimUrl;
|
||||
}
|
||||
|
||||
String newUrl = "http://" + trimUrl;
|
||||
LogUtils.w(TAG, "服务器地址协议头缺失,自动补全为:" + newUrl);
|
||||
LogUtils.d(TAG, "【函数返回】completeServerUrlProtocol(),补全协议头后返回:" + newUrl);
|
||||
return newUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化并启动AuthCenter HTTP服务,绑定配置端口监听,异常则退出程序
|
||||
*/
|
||||
private static void startAuthCenterHttpService() {
|
||||
LogUtils.d(TAG, "【函数调用】startAuthCenterHttpService(),开始启动HTTP服务");
|
||||
httpService = new AuthCenterHttpService(httpPort);
|
||||
|
||||
try {
|
||||
httpService.start();
|
||||
System.out.println("\nAuthCenterHttpService 启动成功,监听端口:" + httpPort);
|
||||
System.out.println("可访问接口:GET http://localhost:" + httpPort + "/authcenter/ping");
|
||||
LogUtils.i(TAG, "HTTP服务启动成功,监听端口[" + httpPort + "]");
|
||||
} catch (IOException e) {
|
||||
String errMsg = "HTTP服务启动失败!端口 " + httpPort + " 可能被占用";
|
||||
System.err.println(errMsg);
|
||||
LogUtils.e(TAG, "【函数异常】startAuthCenterHttpService(),HTTP服务启动失败", e);
|
||||
ConsoleInputUtils.forceExit();
|
||||
releaseAllResources();
|
||||
System.exit(1);
|
||||
}
|
||||
LogUtils.d(TAG, "【函数结束】startAuthCenterHttpService(),HTTP服务启动流程执行完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务常驻阻塞逻辑,注册JVM关闭钩子实现优雅停机,调用工具类监听输入
|
||||
*/
|
||||
private static void consoleBlockForService() {
|
||||
LogUtils.d(TAG, "【函数调用】consoleBlockForService(),开始注册关闭钩子与常驻阻塞");
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
LogUtils.i(TAG, "收到服务停止信号,执行优雅停机流程");
|
||||
ConsoleInputUtils.forceExit();
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
if (httpService != null && httpService.isRunning()) {
|
||||
httpService.stop();
|
||||
LogUtils.i(TAG, "HTTP服务已优雅停止");
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
System.out.println("\n服务已常驻运行,输入exit可退出服务,或执行kill 对应Java进程号停机");
|
||||
while (true) {
|
||||
try {
|
||||
if (ConsoleInputUtils.isExit() || ConsoleInputUtils.checkConsoleCommand()) {
|
||||
break;
|
||||
}
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
LogUtils.w(TAG, "【阻塞中断】服务阻塞线程被中断,准备退出循环", e);
|
||||
ConsoleInputUtils.forceExit();
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
LogUtils.d(TAG, "【函数结束】consoleBlockForService(),常驻阻塞流程退出");
|
||||
}
|
||||
|
||||
/**
|
||||
* 兜底释放所有资源,适配加固后工具类,形成退出闭环
|
||||
*/
|
||||
private static void releaseAllResources() {
|
||||
LogUtils.d(TAG, "【函数调用】releaseAllResources(),兜底释放所有服务资源");
|
||||
if (httpService != null && httpService.isRunning()) {
|
||||
httpService.stop();
|
||||
LogUtils.i(TAG, "HTTP服务兜底停止完成");
|
||||
}
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
MailAuthUtils.getInstance().shutdownScheduler();
|
||||
LogUtils.d(TAG, "【函数结束】releaseAllResources(),所有资源释放完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 数组转字符串,Java7兼容(替代String.join),适配参数日志输出
|
||||
* @param arr 目标字符串数组
|
||||
* @return 拼接后的字符串,空数组返回"空数组"
|
||||
*/
|
||||
private static String arrayToString(String[] arr) {
|
||||
if (arr == null || arr.length == 0) {
|
||||
return "空数组";
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
sb.append(arr[i]);
|
||||
if (i != arr.length - 1) {
|
||||
sb.append(",");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
126
src/cc/winboll/Main.java
Normal file
126
src/cc/winboll/Main.java
Normal file
@@ -0,0 +1,126 @@
|
||||
package cc.winboll;
|
||||
|
||||
import cc.winboll.LogUtils;
|
||||
import cc.winboll.auth.MailAuthUtils;
|
||||
import cc.winboll.service.AuthCenterHttpService;
|
||||
import cc.winboll.util.ConsoleInputUtils;
|
||||
import cc.winboll.util.EmailSendUtils;
|
||||
import cc.winboll.util.EnvInfoUtils;
|
||||
import cc.winboll.util.IniConfigUtils;
|
||||
import cc.winboll.util.InitCheckUtils;
|
||||
import cc.winboll.util.MainUtils;
|
||||
import cc.winboll.util.ServerUtils;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 程序入口类,负责初始化运行环境检测与AuthCenter HTTP服务启动
|
||||
* 适配Java7语言规范,兼容Android API30运行环境,支持优雅停机
|
||||
* 启动参数规则:1. -detail(可选,显示详细环境信息) 2. 服务器地址(可选,覆盖默认/INI配置)
|
||||
* 支持控制台输入交互,输入help查帮助、输入exit退出、其他指令提示未识别
|
||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||
* @Date 2026/01/14 00:00:00
|
||||
* @LastEditTime 2026/01/18 11:00:00
|
||||
*/
|
||||
public class Main {
|
||||
private static final String TAG = "AuthCenterMain";
|
||||
private static AuthCenterHttpService httpService;
|
||||
private static int httpPort;
|
||||
|
||||
public static void main(String[] args) {
|
||||
IniConfigUtils.loadRootConfig();
|
||||
LogUtils.d(TAG, "【函数调用】main(),传入参数:" + MainUtils.arrayToString(args));
|
||||
|
||||
boolean showDetailEnv = MainUtils.parseDetailArg(args);
|
||||
String serverUrl = MainUtils.getFinalServerUrl(args);
|
||||
httpPort = MainUtils.getHttpPortFromConfig();
|
||||
|
||||
EnvInfoUtils.printEnvReport(showDetailEnv);
|
||||
initServerUtils(serverUrl);
|
||||
EmailSendUtils.initEmailConfig();
|
||||
|
||||
boolean initCheckPass = InitCheckUtils.checkAllInitConfig();
|
||||
if (!initCheckPass) {
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
System.out.println("Hello World!");
|
||||
|
||||
startAuthCenterHttpService();
|
||||
ConsoleInputUtils.initConsoleScanner();
|
||||
consoleBlockForService();
|
||||
|
||||
MainUtils.releaseAllResources(httpService);
|
||||
LogUtils.i(TAG, "【函数结束】main(),程序正常退出");
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化服务器交互工具类
|
||||
*/
|
||||
private static void initServerUtils(String serverUrl) {
|
||||
LogUtils.d(TAG, "【函数调用】initServerUtils(),入参初始服务器地址:" + serverUrl);
|
||||
String finalServerUrl = MainUtils.completeServerUrlProtocol(serverUrl);
|
||||
|
||||
ServerUtils.initServerUrl(finalServerUrl);
|
||||
System.out.println("✅ ServerUtils 初始化完成,当前服务器地址:" + finalServerUrl);
|
||||
LogUtils.d(TAG, "【函数结束】initServerUtils(),服务器交互工具初始化就绪");
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化并启动AuthCenter HTTP服务
|
||||
*/
|
||||
private static void startAuthCenterHttpService() {
|
||||
LogUtils.d(TAG, "【函数调用】startAuthCenterHttpService(),开始启动HTTP服务");
|
||||
httpService = new AuthCenterHttpService(httpPort);
|
||||
|
||||
try {
|
||||
httpService.start();
|
||||
System.out.println("\nAuthCenterHttpService 启动成功,监听端口:" + httpPort);
|
||||
System.out.println("可访问接口:GET http://localhost:" + httpPort + "/authcenter/ping");
|
||||
LogUtils.i(TAG, "HTTP服务启动成功,监听端口[" + httpPort + "]");
|
||||
} catch (IOException e) {
|
||||
String errMsg = "HTTP服务启动失败!端口 " + httpPort + " 可能被占用";
|
||||
System.err.println(errMsg);
|
||||
LogUtils.e(TAG, "【函数异常】startAuthCenterHttpService(),HTTP服务启动失败", e);
|
||||
ConsoleInputUtils.forceExit();
|
||||
MainUtils.releaseAllResources(httpService);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务常驻阻塞逻辑
|
||||
*/
|
||||
private static void consoleBlockForService() {
|
||||
LogUtils.d(TAG, "【函数调用】consoleBlockForService(),开始注册关闭钩子与常驻阻塞");
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
LogUtils.i(TAG, "收到服务停止信号,执行优雅停机流程");
|
||||
ConsoleInputUtils.forceExit();
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
if (httpService != null && httpService.isRunning()) {
|
||||
httpService.stop();
|
||||
LogUtils.i(TAG, "HTTP服务已优雅停止");
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
System.out.println("\n服务已常驻运行,输入exit可退出服务,或执行kill 对应Java进程号停机");
|
||||
while (true) {
|
||||
try {
|
||||
if (ConsoleInputUtils.isExit() || ConsoleInputUtils.checkConsoleCommand()) {
|
||||
break;
|
||||
}
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
LogUtils.w(TAG, "【阻塞中断】服务阻塞线程被中断,准备退出循环", e);
|
||||
ConsoleInputUtils.forceExit();
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
LogUtils.d(TAG, "【函数结束】consoleBlockForService(),常驻阻塞流程退出");
|
||||
}
|
||||
}
|
||||
|
||||
157
src/cc/winboll/util/MainUtils.java
Normal file
157
src/cc/winboll/util/MainUtils.java
Normal file
@@ -0,0 +1,157 @@
|
||||
package cc.winboll.util;
|
||||
|
||||
import cc.winboll.LogUtils;
|
||||
import cc.winboll.auth.MailAuthUtils;
|
||||
import cc.winboll.service.AuthCenterHttpService;
|
||||
|
||||
/**
|
||||
* Main类通用工具抽离,负责参数解析、地址处理、资源释放
|
||||
* 适配Java7 + Android API30,无状态设计,纯静态方法
|
||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||
* @Date 2026/01/18 11:00:00
|
||||
*/
|
||||
public class MainUtils {
|
||||
// 常量迁移:与业务无关的通用常量
|
||||
public static final String ARG_DETAIL = "-detail";
|
||||
public static final String INI_SERVER_SECTION = "ServerConfig";
|
||||
public static final String INI_SERVER_KEY = "server_base_url";
|
||||
public static final String INI_HTTP_SECTION = "HttpServiceConfig";
|
||||
public static final String INI_HTTP_PORT_KEY = "http_server_port";
|
||||
public static final int DEFAULT_HTTP_PORT = 8080;
|
||||
public static final String DEFAULT_SERVER_URL = "http://localhost:8080";
|
||||
private static final String TAG = "MainUtils";
|
||||
|
||||
/**
|
||||
* 解析启动参数,判断是否输出详细环境信息
|
||||
*/
|
||||
public static boolean parseDetailArg(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】parseDetailArg(),入参args:" + arrayToString(args));
|
||||
if (args == null || args.length == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (String arg : args) {
|
||||
String trimArg = arg.trim();
|
||||
if (ARG_DETAIL.equalsIgnoreCase(trimArg)) {
|
||||
LogUtils.i(TAG, "【参数检测】匹配-detail参数,将输出详细环境信息");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 整合多来源服务器地址,优先级 启动参数 > INI配置 > 默认地址
|
||||
*/
|
||||
public static String getFinalServerUrl(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】getFinalServerUrl(),整合服务器地址(启动参数>INI>默认)");
|
||||
String argUrl = parseServerUrlArg(args);
|
||||
if (argUrl != null && !argUrl.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "服务器地址优先级1:启动参数 → " + argUrl);
|
||||
return argUrl;
|
||||
}
|
||||
String iniUrl = IniConfigUtils.getConfigValue(INI_SERVER_SECTION, INI_SERVER_KEY);
|
||||
if (iniUrl != null && !iniUrl.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "服务器地址优先级2:INI配置 → " + iniUrl);
|
||||
return iniUrl;
|
||||
}
|
||||
LogUtils.i(TAG, "服务器地址优先级3:默认地址 → " + DEFAULT_SERVER_URL);
|
||||
return DEFAULT_SERVER_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从启动参数提取自定义服务器地址
|
||||
*/
|
||||
private static String parseServerUrlArg(String[] args) {
|
||||
LogUtils.d(TAG, "【函数调用】parseServerUrlArg(),入参args:" + arrayToString(args));
|
||||
if (args == null || args.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (String arg : args) {
|
||||
String trimArg = arg.trim();
|
||||
if (!ARG_DETAIL.equalsIgnoreCase(trimArg) && !trimArg.isEmpty()) {
|
||||
LogUtils.i(TAG, "【参数检测】匹配自定义服务器地址,覆盖默认值:" + trimArg);
|
||||
return trimArg;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 补全服务器地址HTTP/HTTPS协议头
|
||||
*/
|
||||
public static String completeServerUrlProtocol(String url) {
|
||||
LogUtils.d(TAG, "【函数调用】completeServerUrlProtocol(),入参原始地址:" + url);
|
||||
if (url == null || url.trim().isEmpty()) {
|
||||
LogUtils.w(TAG, "原始地址为空,使用默认服务器地址:" + DEFAULT_SERVER_URL);
|
||||
return DEFAULT_SERVER_URL;
|
||||
}
|
||||
|
||||
String trimUrl = url.trim();
|
||||
if (trimUrl.startsWith("http://") || trimUrl.startsWith("https://")) {
|
||||
return trimUrl;
|
||||
}
|
||||
|
||||
String newUrl = "http://" + trimUrl;
|
||||
LogUtils.w(TAG, "服务器地址协议头缺失,自动补全为:" + newUrl);
|
||||
return newUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从INI读取HTTP端口,无配置兜底默认值
|
||||
*/
|
||||
public static int getHttpPortFromConfig() {
|
||||
LogUtils.d(TAG, "【函数调用】getHttpPortFromConfig(),读取HTTP服务端口配置");
|
||||
String portStr = IniConfigUtils.getConfigValue(INI_HTTP_SECTION, INI_HTTP_PORT_KEY);
|
||||
if (portStr == null || portStr.trim().isEmpty()) {
|
||||
LogUtils.i(TAG, "未读取到HTTP端口配置,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
try {
|
||||
int port = Integer.parseInt(portStr.trim());
|
||||
if (port > 0 && port <= 65535) {
|
||||
LogUtils.i(TAG, "从INI读取HTTP端口成功:" + port);
|
||||
return port;
|
||||
} else {
|
||||
LogUtils.w(TAG, "HTTP端口配置非法,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogUtils.w(TAG, "HTTP端口配置解析失败,使用默认端口:" + DEFAULT_HTTP_PORT);
|
||||
return DEFAULT_HTTP_PORT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 统一资源释放逻辑
|
||||
*/
|
||||
public static void releaseAllResources(AuthCenterHttpService httpService) {
|
||||
LogUtils.d(TAG, "【函数调用】releaseAllResources(),兜底释放所有服务资源");
|
||||
if (httpService != null && httpService.isRunning()) {
|
||||
httpService.stop();
|
||||
LogUtils.i(TAG, "HTTP服务兜底停止完成");
|
||||
}
|
||||
ConsoleInputUtils.closeConsoleScanner();
|
||||
MailAuthUtils.getInstance().shutdownScheduler();
|
||||
LogUtils.d(TAG, "【函数结束】releaseAllResources(),所有资源释放完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 数组转字符串,Java7兼容(替代String.join)
|
||||
*/
|
||||
public static String arrayToString(String[] arr) {
|
||||
if (arr == null || arr.length == 0) {
|
||||
return "空数组";
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
sb.append(arr[i]);
|
||||
if (i != arr.length - 1) {
|
||||
sb.append(",");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user