2025-01-15 01:57:10 +00:00
|
|
|
|
package com.cmcc.magent.config;
|
2025-01-08 07:41:15 +00:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
/**
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 通用配置类。
|
2025-01-08 07:41:15 +00:00
|
|
|
|
* <p>
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 该配置类主要用于加载项目的公共配置属性,并初始化全局变量。
|
|
|
|
|
* </p>
|
|
|
|
|
*
|
|
|
|
|
* 主要功能包括:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>从配置文件加载项目的公共属性。</li>
|
|
|
|
|
* <li>动态设置全局项目的基本 URL 和前缀 URL。</li>
|
|
|
|
|
* <li>初始化与项目国际化(默认 {@link Locale})和其他公共属性相关的配置。</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*
|
2025-01-08 07:41:15 +00:00
|
|
|
|
* <p>
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 属性值通过 {@code application.yml} 文件中的 `common` 配置前缀加载。
|
|
|
|
|
* </p>
|
|
|
|
|
*
|
|
|
|
|
* 示例:
|
|
|
|
|
* <pre>
|
|
|
|
|
* common:
|
|
|
|
|
* tokenExpiredOfSeconds: 3600
|
|
|
|
|
* allowPasswdRetryTimes: 5
|
|
|
|
|
* locale: zh_CN
|
|
|
|
|
* showSqlCommand: true
|
|
|
|
|
* </pre>
|
|
|
|
|
*
|
2025-01-08 07:41:15 +00:00
|
|
|
|
* @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 {
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 项目的基础 URL。
|
|
|
|
|
* <p>
|
|
|
|
|
* 由服务器的 IP 地址、端口号和上下文路径动态生成。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
public static String BASEURL;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 项目的前缀 URL。
|
|
|
|
|
* <p>
|
|
|
|
|
* 该值通常对应于项目的上下文路径(Context Path)。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
public static String PROJECT_PREFIX_URL;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 服务配置属性。
|
|
|
|
|
* <p>
|
|
|
|
|
* 用于获取服务器的上下文路径、端口号等信息。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
@Resource
|
|
|
|
|
private ServerProperties serverProperties;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* Token 的过期时间(单位:秒)。
|
|
|
|
|
* <p>
|
|
|
|
|
* 表示用户登录的 Token 在多少秒后失效。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
private Integer tokenExpiredOfSeconds;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 允许的密码重试次数。
|
|
|
|
|
* <p>
|
|
|
|
|
* 如果用户登录失败,则累计失败次数超过该值时,将触发账户锁定或其他安全策略。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
private Integer allowPasswdRetryTimes;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 默认的国际化语言区域。
|
|
|
|
|
* <p>
|
|
|
|
|
* 格式为 {@code language_country},例如 {@code zh_CN} 表示简体中文。
|
|
|
|
|
* 默认值为 {@code Locale.CHINA}。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
private String locale;
|
|
|
|
|
|
2025-01-13 09:59:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* 是否显示 SQL 命令。
|
|
|
|
|
* <p>
|
|
|
|
|
* 用于控制是否在日志中显示执行的 SQL 语句,仅在调试模式下使用。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
2025-01-08 07:41:15 +00:00
|
|
|
|
private boolean showSqlCommand;
|
|
|
|
|
|
2025-02-19 02:35:52 +00:00
|
|
|
|
/**
|
|
|
|
|
* 数据文件保存目录。
|
|
|
|
|
* <p>
|
|
|
|
|
* 用于创建本地数据文件。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
|
|
|
|
private String dataRootDirectory;
|
|
|
|
|
|
2025-02-20 06:44:07 +00:00
|
|
|
|
/**
|
|
|
|
|
* 中间件部署任务执行模式。
|
|
|
|
|
* <p>
|
|
|
|
|
* 是否异步部署中间件,接收到部署任务后尽快返回。
|
|
|
|
|
* </p>
|
|
|
|
|
*/
|
|
|
|
|
private boolean asyncDeployment;
|
|
|
|
|
|
2025-01-08 07:41:15 +00:00
|
|
|
|
/**
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 设置全局静态变量的值。
|
|
|
|
|
*
|
|
|
|
|
* @param prefixUrl 项目上下文路径(Context Path)
|
|
|
|
|
* @param baseUrl 项目的基础 URL,包括协议、主机地址和端口号
|
2025-01-08 07:41:15 +00:00
|
|
|
|
*/
|
|
|
|
|
private static void setGlobalVars(String prefixUrl, String baseUrl) {
|
|
|
|
|
PROJECT_PREFIX_URL = prefixUrl;
|
|
|
|
|
BASEURL = baseUrl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 获取默认的语言区域(Locale)。
|
2025-01-08 07:41:15 +00:00
|
|
|
|
* <p>
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 如果配置的语言格式不正确,则返回系统默认的 {@link Locale#CHINA}。
|
|
|
|
|
* </p>
|
|
|
|
|
*
|
|
|
|
|
* @return 默认的语言区域 {@link Locale}
|
2025-01-08 07:41:15 +00:00
|
|
|
|
*/
|
|
|
|
|
public Locale getDefaultLocale() {
|
2025-01-14 03:01:22 +00:00
|
|
|
|
final int localSegment = 2;
|
2025-01-08 07:41:15 +00:00
|
|
|
|
// 按下划线分割
|
|
|
|
|
String[] parts = locale.split("_");
|
2025-01-14 03:01:22 +00:00
|
|
|
|
if (localSegment == parts.length) {
|
2025-01-08 07:41:15 +00:00
|
|
|
|
return new Locale(parts[0], parts[1]);
|
|
|
|
|
}
|
|
|
|
|
// 如果格式不正确,则返回系统默认 Locale.CHINA
|
|
|
|
|
return Locale.CHINA;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 初始化全局变量的值。
|
2025-01-08 07:41:15 +00:00
|
|
|
|
* <p>
|
2025-01-13 09:59:46 +00:00
|
|
|
|
* 该方法在 Bean 初始化完成后通过 {@link PostConstruct} 注解自动调用:
|
|
|
|
|
* <ul>
|
|
|
|
|
* <li>初始化全局变量 {@code BASEURL} 和 {@code PROJECT_PREFIX_URL}。</li>
|
|
|
|
|
* <li>设置默认语言区域(Locale)。</li>
|
|
|
|
|
* <li>打印重要的配置信息以供调试。</li>
|
|
|
|
|
* </ul>
|
2025-01-08 07:41:15 +00:00
|
|
|
|
*/
|
|
|
|
|
@PostConstruct
|
|
|
|
|
private void initGlobalValue() {
|
2025-01-14 09:22:41 +00:00
|
|
|
|
log.info("Current: tokenExpiredOfSeconds = {}, allowPasswdRetryTimes = {}, showSqlCommand = {}",
|
|
|
|
|
tokenExpiredOfSeconds,
|
|
|
|
|
allowPasswdRetryTimes,
|
|
|
|
|
showSqlCommand);
|
2025-01-08 07:41:15 +00:00
|
|
|
|
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
}
|