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 redisLanguage; private void logBaseInfo() { log.info("JDBC URL: {}", jdbcURL); log.info("Redis URL: {}:{}", redisURL, redisPort); log.info("System Setting:"); List 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 extensionsList; for (Map.Entry 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); } } } }