186 lines
5.2 KiB
Java
186 lines
5.2 KiB
Java
package com.cmcc.magent.config;
|
||
|
||
import jakarta.annotation.PostConstruct;
|
||
import jakarta.annotation.Resource;
|
||
import lombok.Data;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||
import org.springframework.context.annotation.Configuration;
|
||
|
||
import java.net.InetAddress;
|
||
import java.util.Locale;
|
||
|
||
/**
|
||
* 通用配置类。
|
||
* <p>
|
||
* 该配置类主要用于加载项目的公共配置属性,并初始化全局变量。
|
||
* </p>
|
||
*
|
||
* 主要功能包括:
|
||
* <ul>
|
||
* <li>从配置文件加载项目的公共属性。</li>
|
||
* <li>动态设置全局项目的基本 URL 和前缀 URL。</li>
|
||
* <li>初始化与项目国际化(默认 {@link Locale})和其他公共属性相关的配置。</li>
|
||
* </ul>
|
||
*
|
||
* <p>
|
||
* 属性值通过 {@code application.yml} 文件中的 `common` 配置前缀加载。
|
||
* </p>
|
||
*
|
||
* 示例:
|
||
* <pre>
|
||
* common:
|
||
* tokenExpiredOfSeconds: 3600
|
||
* allowPasswdRetryTimes: 5
|
||
* locale: zh_CN
|
||
* showSqlCommand: true
|
||
* </pre>
|
||
*
|
||
* @author huangxin@cmhi.chinamobile.com
|
||
* @version 1.0.0
|
||
* @since 2025-01-07
|
||
*/
|
||
@Data
|
||
@ConfigurationProperties(prefix = "common")
|
||
@Configuration
|
||
@Slf4j
|
||
@SuppressWarnings({"java:S3008", "java:S1444", "java:S1104"})
|
||
public class CommonConfigure {
|
||
|
||
/**
|
||
* 项目的基础 URL。
|
||
* <p>
|
||
* 由服务器的 IP 地址、端口号和上下文路径动态生成。
|
||
* </p>
|
||
*/
|
||
public static String BASEURL;
|
||
|
||
/**
|
||
* 项目的前缀 URL。
|
||
* <p>
|
||
* 该值通常对应于项目的上下文路径(Context Path)。
|
||
* </p>
|
||
*/
|
||
public static String PROJECT_PREFIX_URL;
|
||
|
||
/**
|
||
* 服务配置属性。
|
||
* <p>
|
||
* 用于获取服务器的上下文路径、端口号等信息。
|
||
* </p>
|
||
*/
|
||
@Resource
|
||
private ServerProperties serverProperties;
|
||
|
||
/**
|
||
* Token 的过期时间(单位:秒)。
|
||
* <p>
|
||
* 表示用户登录的 Token 在多少秒后失效。
|
||
* </p>
|
||
*/
|
||
private Integer tokenExpiredOfSeconds;
|
||
|
||
/**
|
||
* 允许的密码重试次数。
|
||
* <p>
|
||
* 如果用户登录失败,则累计失败次数超过该值时,将触发账户锁定或其他安全策略。
|
||
* </p>
|
||
*/
|
||
private Integer allowPasswdRetryTimes;
|
||
|
||
/**
|
||
* 默认的国际化语言区域。
|
||
* <p>
|
||
* 格式为 {@code language_country},例如 {@code zh_CN} 表示简体中文。
|
||
* 默认值为 {@code Locale.CHINA}。
|
||
* </p>
|
||
*/
|
||
private String locale;
|
||
|
||
/**
|
||
* 是否显示 SQL 命令。
|
||
* <p>
|
||
* 用于控制是否在日志中显示执行的 SQL 语句,仅在调试模式下使用。
|
||
* </p>
|
||
*/
|
||
private boolean showSqlCommand;
|
||
|
||
/**
|
||
* 数据文件保存目录。
|
||
* <p>
|
||
* 用于创建本地数据文件。
|
||
* </p>
|
||
*/
|
||
private String dataRootDirectory;
|
||
|
||
/**
|
||
* 中间件部署任务执行模式。
|
||
* <p>
|
||
* 是否异步部署中间件,接收到部署任务后尽快返回。
|
||
* </p>
|
||
*/
|
||
private boolean asyncDeployment;
|
||
|
||
/**
|
||
* 设置全局静态变量的值。
|
||
*
|
||
* @param prefixUrl 项目上下文路径(Context Path)
|
||
* @param baseUrl 项目的基础 URL,包括协议、主机地址和端口号
|
||
*/
|
||
private static void setGlobalVars(String prefixUrl, String baseUrl) {
|
||
PROJECT_PREFIX_URL = prefixUrl;
|
||
BASEURL = baseUrl;
|
||
}
|
||
|
||
/**
|
||
* 获取默认的语言区域(Locale)。
|
||
* <p>
|
||
* 如果配置的语言格式不正确,则返回系统默认的 {@link Locale#CHINA}。
|
||
* </p>
|
||
*
|
||
* @return 默认的语言区域 {@link Locale}
|
||
*/
|
||
public Locale getDefaultLocale() {
|
||
final int localSegment = 2;
|
||
// 按下划线分割
|
||
String[] parts = locale.split("_");
|
||
if (localSegment == parts.length) {
|
||
return new Locale(parts[0], parts[1]);
|
||
}
|
||
// 如果格式不正确,则返回系统默认 Locale.CHINA
|
||
return Locale.CHINA;
|
||
}
|
||
|
||
/**
|
||
* 初始化全局变量的值。
|
||
* <p>
|
||
* 该方法在 Bean 初始化完成后通过 {@link PostConstruct} 注解自动调用:
|
||
* <ul>
|
||
* <li>初始化全局变量 {@code BASEURL} 和 {@code PROJECT_PREFIX_URL}。</li>
|
||
* <li>设置默认语言区域(Locale)。</li>
|
||
* <li>打印重要的配置信息以供调试。</li>
|
||
* </ul>
|
||
*/
|
||
@PostConstruct
|
||
private void initGlobalValue() {
|
||
log.info("Current: tokenExpiredOfSeconds = {}, allowPasswdRetryTimes = {}, showSqlCommand = {}",
|
||
tokenExpiredOfSeconds,
|
||
allowPasswdRetryTimes,
|
||
showSqlCommand);
|
||
|
||
String addr = "localhost";
|
||
try {
|
||
addr = InetAddress.getLocalHost().getHostAddress();
|
||
} catch (Exception e) {
|
||
log.error("Unable get local ip address: {}", e.getMessage());
|
||
} finally {
|
||
setGlobalVars(serverProperties.getServlet().getContextPath(),
|
||
"http://" + addr + ":" + serverProperties.getPort() + serverProperties.getServlet().getContextPath());
|
||
log.info("baseUrl: {}", BASEURL);
|
||
}
|
||
|
||
Locale.setDefault(getDefaultLocale());
|
||
}
|
||
}
|