Files
TimiServerAPI/src/main/java/com/imyeyu/api/util/InitApplication.java
2025-11-06 14:52:13 +08:00

126 lines
4.0 KiB
Java

package com.imyeyu.api.util;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.imyeyu.api.TimiServerAPI;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.Multilingual;
import com.imyeyu.api.modules.common.entity.Setting;
import com.imyeyu.api.modules.common.service.SettingService;
import com.imyeyu.api.modules.system.bean.ServerFile;
import com.imyeyu.java.ref.Ref;
import com.imyeyu.lang.mapper.AbstractLanguageMapper;
import com.imyeyu.spring.util.GlobalReturnHandler;
import com.imyeyu.spring.util.Redis;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.jgit.api.ArchiveCommand;
import org.eclipse.jgit.archive.TarFormat;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* SpringBoot 启动事件,主要输出基本参数,避免混淆运行环境
*
* @author 夜雨
* @version 2021-07-24 14:29
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class InitApplication implements ApplicationRunner {
@Value("${spring.datasource.timiserver.jdbc-url}")
private String jdbcURL;
@Value("${spring.redis.host}")
private String redisURL;
@Value("${spring.redis.port}")
private int redisPort;
@Value("${spring.profiles.active}")
private String env;
@Value("${dev.lang}")
private String devLang;
private final SettingService settingService;
private final RedisMultilingual redisMultilingual;
private final GlobalReturnHandler globalReturnHandler;
private final Redis<Long, Multilingual> redisLanguage;
private void logBaseInfo() {
log.info("JDBC URL: {}", jdbcURL);
log.info("Redis URL: {}:{}", redisURL, redisPort);
log.info("System Setting:");
List<Setting> settings = settingService.listAll();
for (Setting setting : settings) {
String value = Objects.requireNonNullElse(setting.getValue(), "");
if (64 < value.length()) {
value = value.substring(0, 64) + "..";
}
value = value.replaceAll("[\\r\\n]+", "");
log.info("\t{}: {}", setting.getKey(), value);
}
log.info("Init Application Finished.");
}
private void initGitCommand() {
ArchiveCommand.registerFormat("tar.gz", new TarFormat());
}
private void initMultilingual() {
// redisLanguage.flushAll();
globalReturnHandler.setMultilingualHeader(mapping -> {
AbstractLanguageMapper map = redisMultilingual.map(TimiServerAPI.getUserLanguage());
return map.textArgs(mapping.getMsgKey(), mapping.getMsgArgs());
});
}
private void initFileType() {
JsonObject items = settingService.getAsJsonObject(SettingKey.SYSTEM_FILE_TYPE);
String[] extensions;
JsonArray extensionsArray;
JsonObject itemObject;
List<String> extensionsList;
for (Map.Entry<String, JsonElement> item : items.entrySet()) {
ServerFile.FileType fileType = Ref.toType(ServerFile.FileType.class, item.getKey());
itemObject = item.getValue().getAsJsonObject();
extensionsList = new ArrayList<>();
extensionsArray = itemObject.get("extensions").getAsJsonArray();
for (int i = 0; i < extensionsArray.size(); i++) {
if (extensionsArray.get(i).isJsonObject()) {
extensionsList.add(extensionsArray.get(i).getAsJsonObject().get("value").getAsString());
} else {
extensionsList.add(extensionsArray.get(i).getAsString());
}
}
extensions = new String[extensionsList.size()];
// 设置扩展名所属文件类型
fileType.setExtensions(extensionsList.toArray(extensions));
}
}
@Override
public void run(ApplicationArguments args) throws Exception {
Method[] methods = getClass().getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
if (!methods[i].getName().equals("run") && !methods[i].getName().contains("$")) {
methods[i].setAccessible(true);
methods[i].invoke(this);
}
}
}
}