126 lines
4.0 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|