mirror of
https://github.com/CarmJos/MineSQL.git
synced 2024-09-19 20:25:45 +00:00
commit
30b1edc753
@ -74,18 +74,17 @@ public class BukkitConfiguration implements PluginConfiguration {
|
|||||||
EasySQLBukkit.getInstance().error("端口未配置正确," + " 请检查配置文件 databases." + dbName + "。");
|
EasySQLBukkit.getInstance().error("端口未配置正确," + " 请检查配置文件 databases." + dbName + "。");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
DBConfiguration configuration = DBConfiguration.create(driverType, host + ":" + port);
|
DBConfiguration dbConfiguration = DBConfiguration.create(driverType, host + ":" + port);
|
||||||
|
|
||||||
String username = dbSection.getString("username");
|
String username = dbSection.getString("username");
|
||||||
String password = dbSection.getString("password");
|
String password = dbSection.getString("password");
|
||||||
|
|
||||||
|
dbConfiguration.setUsername(username);
|
||||||
|
dbConfiguration.setPassword(password);
|
||||||
|
|
||||||
|
dbConfigurations.put(dbName, dbConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return dbConfigurations;
|
return dbConfigurations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,6 @@ public class EasySQLBukkit extends EasyPlugin implements EasySQLPluginPlatform {
|
|||||||
} else {
|
} else {
|
||||||
log("已禁用检查更新,跳过。");
|
log("已禁用检查更新,跳过。");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,43 @@
|
|||||||
<url>https://github.com/CarmJos/EasySQL-Plugin/actions/workflows/maven.yml</url>
|
<url>https://github.com/CarmJos/EasySQL-Plugin/actions/workflows/maven.yml</url>
|
||||||
</ciManagement>
|
</ciManagement>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>sponge</id>
|
||||||
|
<url>http://repo.spongepowered.org/maven</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
|
<artifactId>easysql-plugin-core</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spongepowered</groupId>
|
||||||
|
<artifactId>spongeapi</artifactId>
|
||||||
|
<version>8.0.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>ninja.leaping.configurate</groupId>
|
||||||
|
<artifactId>configurate-hocon</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bstats</groupId>
|
||||||
|
<artifactId>bstats-sponge</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
<optional>true</optional>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -0,0 +1,184 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
|
import cc.carm.plugin.easysql.configuration.PluginConfiguration;
|
||||||
|
import cc.carm.plugin.easysql.util.DBPropertiesUtil;
|
||||||
|
import cc.carm.plugin.easysql.util.JarResourceUtils;
|
||||||
|
import cn.beecp.BeeDataSource;
|
||||||
|
import com.google.common.io.MoreFiles;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.bstats.charts.SimplePie;
|
||||||
|
import org.bstats.sponge.Metrics;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.spongepowered.api.Server;
|
||||||
|
import org.spongepowered.api.config.ConfigDir;
|
||||||
|
import org.spongepowered.api.event.Listener;
|
||||||
|
import org.spongepowered.api.event.lifecycle.StoppingEngineEvent;
|
||||||
|
import org.spongepowered.configurate.ConfigurateException;
|
||||||
|
import org.spongepowered.configurate.ConfigurationNode;
|
||||||
|
import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
|
||||||
|
import org.spongepowered.plugin.PluginContainer;
|
||||||
|
import org.spongepowered.plugin.builtin.jvm.Plugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2022/6/20<br>
|
||||||
|
* MineSQL<br>
|
||||||
|
*
|
||||||
|
* @author huanmeng_qwq
|
||||||
|
*/
|
||||||
|
@Plugin("easysql-plugin")
|
||||||
|
public class EasySQLSponge implements EasySQLPluginPlatform {
|
||||||
|
@Inject
|
||||||
|
@ConfigDir(sharedRoot = false)
|
||||||
|
private Path configDirectory;
|
||||||
|
@Inject
|
||||||
|
private org.apache.logging.log4j.Logger logger;
|
||||||
|
|
||||||
|
private static EasySQLSponge instance;
|
||||||
|
private ConfigurationNode root;
|
||||||
|
private PluginConfiguration configuration;
|
||||||
|
private EasySQLRegistryImpl registry;
|
||||||
|
private PluginContainer pluginContainer;
|
||||||
|
|
||||||
|
private final Metrics metrics;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public EasySQLSponge(Metrics.Factory factory, PluginContainer pluginContainer) {
|
||||||
|
this.metrics = factory.make(14075);
|
||||||
|
instance = this;
|
||||||
|
HoconConfigurationLoader loader = HoconConfigurationLoader.builder().path(resolveConfig()).build();
|
||||||
|
try {
|
||||||
|
this.root = loader.load();
|
||||||
|
this.configuration = new SpongeConfiguration(root);
|
||||||
|
this.registry = new EasySQLRegistryImpl(this);
|
||||||
|
this.pluginContainer = pluginContainer;
|
||||||
|
enable();
|
||||||
|
} catch (ConfigurateException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Listener
|
||||||
|
public void disable(StoppingEngineEvent<Server> e) {
|
||||||
|
getLog().info("终止全部数据库连接...");
|
||||||
|
for (String dbName : new HashSet<>(getRegistry().list().keySet())) {
|
||||||
|
getLog().info(" 正在关闭数据库 " + dbName + "...");
|
||||||
|
SQLManager manager = getRegistry().get(dbName);
|
||||||
|
getRegistry().shutdown(manager, activeQueries -> {
|
||||||
|
getLog().info(" 数据库 " + dbName + " 仍有有 " + activeQueries + " 条活动查询,强制关闭中...");
|
||||||
|
if (manager.getDataSource() instanceof BeeDataSource) {
|
||||||
|
BeeDataSource dataSource = (BeeDataSource) manager.getDataSource();
|
||||||
|
dataSource.close(); //Close bee connection pool
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getRegistry().getManagers().clear(); // release all managers
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void enable() {
|
||||||
|
/*
|
||||||
|
//todo acf-commands not support sponge8
|
||||||
|
getLog().info("初始化指令管理器...");
|
||||||
|
getLog().info("注册相关指令...");
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (getConfiguration().isMetricsEnabled()) {
|
||||||
|
getLog().info("启用统计数据...");
|
||||||
|
metrics.addCustomChart(new SimplePie("update_check",
|
||||||
|
() -> getConfiguration().isUpdateCheckerEnabled() ? "ENABLED" : "DISABLED")
|
||||||
|
);
|
||||||
|
metrics.addCustomChart(new SimplePie("properties_configuration",
|
||||||
|
() -> getConfiguration().isPropertiesEnabled() ? "ENABLED" : "DISABLED")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getConfiguration().isUpdateCheckerEnabled()) {
|
||||||
|
getLog().info("开始检查更新...");
|
||||||
|
getRegistry().checkUpdate(pluginContainer.metadata().version().getQualifier());
|
||||||
|
} else {
|
||||||
|
getLog().info("已禁用检查更新,跳过。");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Map<String, DBConfiguration> readConfigurations() {
|
||||||
|
return configuration.getDBConfigurations();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Map<String, Properties> readProperties() {
|
||||||
|
if (!getConfiguration().isPropertiesEnabled()) return new HashMap<>();
|
||||||
|
String propertiesFolder = getConfiguration().getPropertiesFolder();
|
||||||
|
if (propertiesFolder == null || propertiesFolder.length() == 0) return new HashMap<>();
|
||||||
|
|
||||||
|
File file = new File(configDirectory.toFile(), propertiesFolder);
|
||||||
|
if (!file.exists() || !file.isDirectory()) {
|
||||||
|
try {
|
||||||
|
JarResourceUtils.copyFolderFromJar(
|
||||||
|
"db-properties", file,
|
||||||
|
JarResourceUtils.CopyOption.COPY_IF_NOT_EXIST
|
||||||
|
);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.error("初始化properties示例文件失败:" + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DBPropertiesUtil.readFromFolder(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Path resolveConfig() {
|
||||||
|
Path path = configDirectory.resolve("easysql.conf");
|
||||||
|
if (!Files.exists(path)) {
|
||||||
|
try {
|
||||||
|
//noinspection UnstableApiUsage
|
||||||
|
MoreFiles.createParentDirectories(configDirectory);
|
||||||
|
try (InputStream is = getClass().getClassLoader().getResourceAsStream("easysql.conf")) {
|
||||||
|
Files.copy(is, path);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationNode getRootConfig() {
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PluginConfiguration getConfiguration() {
|
||||||
|
return configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull EasySQLRegistryImpl getRegistry() {
|
||||||
|
return registry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public java.util.logging.Logger getLogger() {
|
||||||
|
return java.util.logging.Logger.getLogger("easysql-plugin");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EasySQLSponge getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Logger getLog() {
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
|
import cc.carm.plugin.easysql.api.SQLDriverType;
|
||||||
|
import cc.carm.plugin.easysql.configuration.PluginConfiguration;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.spongepowered.configurate.ConfigurationNode;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2022/6/20<br>
|
||||||
|
* MineSQL<br>
|
||||||
|
*
|
||||||
|
* @author huanmeng_qwq
|
||||||
|
*/
|
||||||
|
public class SpongeConfiguration implements PluginConfiguration {
|
||||||
|
private final ConfigurationNode config;
|
||||||
|
|
||||||
|
public SpongeConfiguration(ConfigurationNode config) {
|
||||||
|
this.config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDebugEnabled() {
|
||||||
|
return config.node("debug").getBoolean(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMetricsEnabled() {
|
||||||
|
return config.node("metrics").getBoolean(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isUpdateCheckerEnabled() {
|
||||||
|
return config.node("check-update").getBoolean(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPropertiesEnabled() {
|
||||||
|
return config.node("properties", "enable").getBoolean(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPropertiesFolder() {
|
||||||
|
return config.node("properties", "folder").getString("db-properties/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Map<String, DBConfiguration> getDBConfigurations() {
|
||||||
|
Map<String, DBConfiguration> dbConfigurations = new LinkedHashMap<>();
|
||||||
|
ConfigurationNode dbConfigurationsSection = config.node("databases");
|
||||||
|
if (dbConfigurationsSection != null) {
|
||||||
|
for (Map.Entry<Object, ? extends ConfigurationNode> dbEntry : dbConfigurationsSection.childrenMap().entrySet()) {
|
||||||
|
if (dbEntry.getKey().toString().startsWith("example-")) continue;
|
||||||
|
ConfigurationNode dbSection = dbEntry.getValue();
|
||||||
|
if (dbSection == null) continue;
|
||||||
|
|
||||||
|
String driverString = dbSection.getString("driver-type");
|
||||||
|
SQLDriverType driverType = SQLDriverType.parse(driverString);
|
||||||
|
if (driverType == null) {
|
||||||
|
EasySQLSponge.getInstance().getLog().error("不存在预设的驱动类型 " + driverString + "," + " 请检查配置文件 databases." + dbEntry + "。");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String host = dbSection.getString("host");
|
||||||
|
if (host == null) {
|
||||||
|
EasySQLSponge.getInstance().getLog().error("地址配置不得为空," + " 请检查配置文件 databases." + dbEntry + "。");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int port = dbSection.node("port").getInt(-1);
|
||||||
|
if (port < 0) {
|
||||||
|
EasySQLSponge.getInstance().getLog().error("端口未配置正确," + " 请检查配置文件 databases." + dbEntry + "。");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DBConfiguration dbConfiguration = DBConfiguration.create(driverType, host + ":" + port);
|
||||||
|
|
||||||
|
String username = dbSection.getString("username");
|
||||||
|
String password = dbSection.getString("password");
|
||||||
|
|
||||||
|
dbConfiguration.setUsername(username);
|
||||||
|
dbConfiguration.setPassword(password);
|
||||||
|
dbConfigurations.put(dbEntry.getKey().toString(), dbConfiguration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dbConfigurations;
|
||||||
|
}
|
||||||
|
}
|
17
platforms/sponge/src/main/resource/easysql.conf
Normal file
17
platforms/sponge/src/main/resource/easysql.conf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
debug = false
|
||||||
|
metrics = false
|
||||||
|
check-update = true
|
||||||
|
properties {
|
||||||
|
enable = true
|
||||||
|
folder = "db-properties/"
|
||||||
|
}
|
||||||
|
databases {
|
||||||
|
example-test {
|
||||||
|
driver-type = "MYSQL"
|
||||||
|
host = "localhost"
|
||||||
|
port = -1
|
||||||
|
username = "root"
|
||||||
|
password = "root"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user