perf: 精简代码

This commit is contained in:
2024-03-12 19:40:43 +08:00
parent 7a8bb22f74
commit ffc2ecc2ee
17 changed files with 401 additions and 223 deletions

View File

@@ -6,6 +6,9 @@ import lombok.Getter;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
import net.md_5.bungee.api.plugin.Plugin;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Logger;
@SuppressWarnings("CallToPrintStackTrace")
@@ -17,12 +20,24 @@ public class HamsterCorePlugin extends Plugin {
@Override
public void onLoad() {
long start = System.currentTimeMillis();
instance = this;
long start = System.currentTimeMillis();
Logger logger = getLogger();
logger.info("仓鼠核心正在初始化");
try {
CoreBungeeAPI.init();
File dataFolder = getDataFolder();
if (dataFolder.mkdir()) {
logger.info("已生成插件存档文件夹");
}
File configFile = new File(dataFolder, "config.yml");
if (!configFile.exists()) {
Files.copy(
getResourceAsStream("config.yml"),
configFile.toPath(),
StandardCopyOption.REPLACE_EXISTING
);
}
CoreBungeeAPI.init(configFile);
logger.info("已初始化 CoreAPI");
} catch (Exception e) {
logger.warning("初始化 CoreAPI 出错");
@@ -49,7 +64,7 @@ public class HamsterCorePlugin extends Plugin {
Logger logger = getLogger();
CoreAPI.getInstance().getRedisClient().close();
logger.info("已关闭 Redis 连接池");
CoreBungeeAPI.getInstance().getDataSource().close();
CoreAPI.getInstance().getHikariDataSource().close();
logger.info("已关闭数据库连接池");
CoreAPI.getInstance().getExecutorService().shutdownNow();
logger.info("已关闭 ExecutorService 线程池");

View File

@@ -1,33 +1,31 @@
package cn.hamster3.mc.plugin.core.bungee.api;
import cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.bungee.util.CoreBungeeCordUtils;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage;
import cn.hamster3.mc.plugin.core.common.impl.ComponentTypeAdapter;
import cn.hamster3.mc.plugin.core.common.impl.MessageTypeAdapter;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import io.lettuce.core.RedisClient;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
import net.kyori.adventure.text.Component;
import net.md_5.bungee.config.Configuration;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
@SuppressWarnings("unused")
public final class CoreBungeeAPI extends CoreAPI {
@NotNull
private final Gson gson;
@NotNull
private final Gson humanGson;
@NotNull
private final RedisClient redisClient;
@NotNull
private final HikariDataSource datasource;
private CoreBungeeAPI() {
private CoreBungeeAPI(@NotNull ConfigSection config) {
super(config);
gson = new GsonBuilder()
.registerTypeAdapter(Component.class, ComponentTypeAdapter.INSTANCE)
.registerTypeAdapter(DisplayMessage.class, MessageTypeAdapter.INSTANCE)
@@ -38,62 +36,23 @@ public final class CoreBungeeAPI extends CoreAPI {
.serializeNulls()
.setPrettyPrinting()
.create();
HamsterCorePlugin plugin = HamsterCorePlugin.getInstance();
Configuration config = CoreBungeeCordUtils.getPluginConfig(plugin);
HamsterCorePlugin.getInstance().getLogger().info("正在创建 redis 客户端");
redisClient = RedisClient.create(config.getString("redis-url"));
HamsterCorePlugin.getInstance().getLogger().info("redis 客户端创建完成");
Configuration datasourceConfig = config.getSection("datasource");
if (datasourceConfig == null) {
throw new IllegalArgumentException("配置文件中未找到 datasource 节点");
}
HamsterCorePlugin.getInstance().getLogger().info("正在创建数据库连接池");
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName(datasourceConfig.getString("driver"));
hikariConfig.setJdbcUrl(datasourceConfig.getString("url"));
hikariConfig.setUsername(datasourceConfig.getString("username"));
hikariConfig.setPassword(datasourceConfig.getString("password"));
hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3));
hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1));
long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0);
if (keepAliveTime > 5000) {
hikariConfig.setKeepaliveTime(keepAliveTime);
}
hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000));
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000));
hikariConfig.setPoolName("HamsterCore-Pool");
datasource = new HikariDataSource(hikariConfig);
HamsterCorePlugin.getInstance().getLogger().info("数据库连接池创建完成");
}
public static CoreBungeeAPI getInstance() {
return (CoreBungeeAPI) instance;
}
public static void init() {
public static void init(@NotNull File configFile) throws IOException {
if (instance != null) {
return;
}
instance = new CoreBungeeAPI();
YamlConfig config = YamlConfig.load(configFile);
instance = new CoreBungeeAPI(config);
}
@Override
public @NotNull BungeeAudiences getAudienceProvider() {
return HamsterCorePlugin.getInstance().getAudienceProvider();
}
@Override
public @NotNull HikariDataSource getDataSource() {
return datasource;
}
@Override
public @NotNull RedisClient getRedisClient() {
return redisClient;
public @NotNull Logger getLogger() {
return HamsterCorePlugin.getInstance().getLogger();
}
@Override
@@ -105,4 +64,9 @@ public final class CoreBungeeAPI extends CoreAPI {
public @NotNull Gson getHumanGson() {
return humanGson;
}
@Override
public @NotNull BungeeAudiences getAudienceProvider() {
return HamsterCorePlugin.getInstance().getAudienceProvider();
}
}

View File

@@ -8,8 +8,8 @@ import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
@SuppressWarnings("unused")
public final class CoreBungeeCordUtils {
@@ -32,7 +32,7 @@ public final class CoreBungeeCordUtils {
public static Configuration getPluginConfig(@NotNull Plugin plugin) {
File configFile = new File(plugin.getDataFolder(), "config.yml");
if (!configFile.exists()) {
return saveDefaultConfig(plugin);
return saveConfig(plugin);
}
try {
return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
@@ -45,7 +45,7 @@ public final class CoreBungeeCordUtils {
public static Configuration getPluginConfig(@NotNull Plugin plugin, @NotNull String filename) {
File configFile = new File(plugin.getDataFolder(), filename);
if (!configFile.exists()) {
return saveDefaultConfig(plugin, filename);
return saveConfig(plugin, filename);
}
try {
return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
@@ -55,29 +55,22 @@ public final class CoreBungeeCordUtils {
}
@NotNull
public static Configuration saveDefaultConfig(@NotNull Plugin plugin) {
if (plugin.getDataFolder().mkdir()) {
plugin.getLogger().info("已生成插件存档文件夹");
}
File configFile = new File(plugin.getDataFolder(), "config.yml");
try {
InputStream in = plugin.getResourceAsStream("config.yml");
Files.copy(in, configFile.toPath());
return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
} catch (Exception e) {
throw new RuntimeException(e);
}
public static Configuration saveConfig(@NotNull Plugin plugin) {
return saveConfig(plugin, "config.yml");
}
@NotNull
public static Configuration saveDefaultConfig(@NotNull Plugin plugin, @NotNull String filename) {
public static Configuration saveConfig(@NotNull Plugin plugin, @NotNull String filename) {
if (plugin.getDataFolder().mkdir()) {
plugin.getLogger().info("已生成插件存档文件夹");
}
File configFile = new File(plugin.getDataFolder(), filename);
try {
InputStream in = plugin.getResourceAsStream(filename);
Files.copy(in, configFile.toPath());
Files.copy(
plugin.getResourceAsStream(filename),
configFile.toPath(),
StandardCopyOption.REPLACE_EXISTING
);
return ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
} catch (Exception e) {
throw new RuntimeException(e);