diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..9a48de2
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+github: [ CarmJos ]
+custom: [ 'https://donate.carm.cc' ]
\ No newline at end of file
diff --git a/README.md b/README.md
index c4db872..e33c874 100644
--- a/README.md
+++ b/README.md
@@ -9,4 +9,55 @@
|___/ |___/
```
-# EasySQL-Plugin
\ No newline at end of file
+# EasySQL-Plugin
+
+轻松(用)SQL的独立运行库插件,支持多种服务端,适用于MineCraft全版本。
+
+
+## 安装
+
+## 配置
+
+## 开发
+
+### 依赖方式
+
+## 指令
+插件主指令为 `/easysql` ,所有指令只允许后台执行。
+
+```text
+# help
+- 查看插件指令帮助。
+
+# version
+- 查看插件版本并进行版本更新查询。
+
+# list
+- 列出当前所有的数据源配置与相关信息。
+
+# stats <数据源名称>
+- 查看指定数据源的统计信息与当前仍未关闭的查询。
+```
+
+## 开源协议
+
+本项目源码采用 [GNU General Public License v3.0](https://opensource.org/licenses/GPL-3.0) 开源协议。
+
+
+ 关于 GPL 协议
+
+> GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:
+>
+> #### 可自由复制
+> 你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
+> #### 可自由分发
+> 在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
+> #### 可以用来盈利
+> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
+> #### 可自由修改
+> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
+>
+> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
+>
+> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
+
diff --git a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/EasySQLAPI.java b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/EasySQLAPI.java
index 61219cc..112a553 100644
--- a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/EasySQLAPI.java
+++ b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/EasySQLAPI.java
@@ -1,16 +1,16 @@
package cc.carm.plugin.easysql;
-import cc.carm.plugin.easysql.api.EasySQLManager;
+import cc.carm.plugin.easysql.api.EasySQLRegistry;
public class EasySQLAPI {
- protected static EasySQLManager api;
+ protected static EasySQLRegistry api;
- protected static void init(EasySQLManager api) {
+ protected static void init(EasySQLRegistry api) {
EasySQLAPI.api = api;
}
- public static EasySQLManager get() {
+ public static EasySQLRegistry get() {
return api;
}
diff --git a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/DBConfiguration.java b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/DBConfiguration.java
index 39b2265..8b94896 100644
--- a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/DBConfiguration.java
+++ b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/DBConfiguration.java
@@ -9,14 +9,13 @@ import java.util.List;
public class DBConfiguration {
- public DBConfiguration create(@NotNull SQLSourceType sourceType, @NotNull String url) {
+ public DBConfiguration create(@NotNull SQLDriverType sourceType, @NotNull String url) {
return new DBConfiguration(sourceType.getDriverClass(), sourceType.getUrlPrefix(), url, sourceType.getDefaultSettings());
}
private final @NotNull String driverClassName;
private final @NotNull String urlPrefix;
- private final @NotNull List defaultSettings;
- private final @NotNull List extraSettings;
+ private final @NotNull List initializeSQLs;
private @NotNull String url;
@@ -24,28 +23,33 @@ public class DBConfiguration {
private @Nullable String password;
private @Nullable String connectionInitSql;
- private @Nullable String connectionTestQuery;
+
private @Nullable String poolName;
+ private @Nullable Integer maxPoolSize;
+ private @Nullable Integer maxActive;
+
+ private @Nullable Integer maxHoldTime;
+
+ private @Nullable Long idleTimeout;
+
+ private @Nullable Long maxWaitTime;
+
+
private @Nullable String schema;
private @Nullable Boolean autoCommit;
private @Nullable Boolean readOnly;
- private @Nullable Long connectionTimeout;
- private @Nullable Long validationTimeout;
- private @Nullable Long idleTimeout;
- private @Nullable Long leakDetectionThreshold;
- private @Nullable Long maxLifetime;
- private @Nullable Long keepaliveTime;
- private @Nullable Integer maxPoolSize;
- private @Nullable Integer minIdle;
+ private @Nullable String validationSQL;
+ private @Nullable Integer validationTimeout;
+ private @Nullable Long validationInterval;
+
private DBConfiguration(@NotNull String driverClass, @NotNull String urlPrefix,
- @NotNull String url, @NotNull String[] defaultSettings) {
+ @NotNull String url, @NotNull String[] initializeSQLs) {
this.driverClassName = driverClass;
this.urlPrefix = urlPrefix;
this.url = url;
- this.defaultSettings = Arrays.asList(defaultSettings);
- this.extraSettings = new ArrayList<>();
+ this.initializeSQLs = Arrays.asList(initializeSQLs);
}
public @NotNull String getDriverClassName() {
@@ -56,39 +60,23 @@ public class DBConfiguration {
return urlPrefix;
}
- public @NotNull List getDefaultSettings() {
- return defaultSettings;
+ public @NotNull List getInitializeSQLs() {
+ return initializeSQLs;
}
- public @NotNull List getExtraSettings() {
- return extraSettings;
- }
-
- public DBConfiguration setDefaultSettings(@Nullable String[] defaultSettings) {
- this.defaultSettings.clear();
- this.defaultSettings.addAll(Arrays.asList(defaultSettings));
+ public DBConfiguration setInitializeSQLs(@Nullable String[] initializeSQLs) {
+ this.initializeSQLs.clear();
+ this.initializeSQLs.addAll(Arrays.asList(initializeSQLs));
return this;
}
-
- public DBConfiguration clearDefaultSettings() {
- this.defaultSettings.clear();
- return this;
- }
-
- public DBConfiguration setExtraSettings(@Nullable String[] extraSettings) {
- this.defaultSettings.clear();
- this.extraSettings.addAll(Arrays.asList(extraSettings));
- return this;
- }
-
- public DBConfiguration addExtraSetting(@NotNull String extraSetting) {
- this.extraSettings.add(extraSetting);
+ public DBConfiguration addInitializeSQL(@NotNull String initializeSQL) {
+ this.initializeSQLs.add(initializeSQL);
return this;
}
public DBConfiguration clearExtraSettings() {
- this.defaultSettings.clear();
+ this.initializeSQLs.clear();
return this;
}
@@ -128,12 +116,21 @@ public class DBConfiguration {
return this;
}
- public @Nullable String getConnectionTestQuery() {
- return connectionTestQuery;
+ public @Nullable String getValidationSQL() {
+ return validationSQL;
}
- public DBConfiguration setConnectionTestQuery(String connectionTestQuery) {
- this.connectionTestQuery = connectionTestQuery;
+ public DBConfiguration setValidationSQL(String validationSQL) {
+ this.validationSQL = validationSQL;
+ return this;
+ }
+
+ public @Nullable Long getValidationInterval() {
+ return validationInterval;
+ }
+
+ public DBConfiguration setValidationInterval(@Nullable Long validationInterval) {
+ this.validationInterval = validationInterval;
return this;
}
@@ -173,20 +170,20 @@ public class DBConfiguration {
return this;
}
- public @Nullable Long getConnectionTimeout() {
- return connectionTimeout;
+ public @Nullable Integer getMaxHoldTime() {
+ return maxHoldTime;
}
- public DBConfiguration setConnectionTimeout(Long connectionTimeout) {
- this.connectionTimeout = connectionTimeout;
+ public DBConfiguration setMaxHoldTime(@Nullable Integer maxHoldTime) {
+ this.maxHoldTime = maxHoldTime;
return this;
}
- public @Nullable Long getValidationTimeout() {
+ public @Nullable Integer getValidationTimeout() {
return validationTimeout;
}
- public DBConfiguration setValidationTimeout(Long validationTimeout) {
+ public DBConfiguration setValidationTimeout(Integer validationTimeout) {
this.validationTimeout = validationTimeout;
return this;
}
@@ -200,30 +197,12 @@ public class DBConfiguration {
return this;
}
- public @Nullable Long getLeakDetectionThreshold() {
- return leakDetectionThreshold;
+ public @Nullable Integer getMaxActive() {
+ return maxActive;
}
- public DBConfiguration setLeakDetectionThreshold(Long leakDetectionThreshold) {
- this.leakDetectionThreshold = leakDetectionThreshold;
- return this;
- }
-
- public @Nullable Long getMaxLifetime() {
- return maxLifetime;
- }
-
- public DBConfiguration setMaxLifetime(Long maxLifetime) {
- this.maxLifetime = maxLifetime;
- return this;
- }
-
- public @Nullable Long getKeepaliveTime() {
- return keepaliveTime;
- }
-
- public DBConfiguration setKeepaliveTime(Long keepaliveTime) {
- this.keepaliveTime = keepaliveTime;
+ public DBConfiguration setMaxActive(Integer maxActive) {
+ this.maxActive = maxActive;
return this;
}
@@ -231,17 +210,18 @@ public class DBConfiguration {
return maxPoolSize;
}
- public DBConfiguration setMaxPoolSize(Integer maxPoolSize) {
+ public DBConfiguration setMaxPoolSize(@Nullable Integer maxPoolSize) {
this.maxPoolSize = maxPoolSize;
return this;
}
- public @Nullable Integer getMinIdle() {
- return minIdle;
+ public @Nullable Long getMaxWaitTime() {
+ return maxWaitTime;
}
- public DBConfiguration setMinIdle(Integer minIdle) {
- this.minIdle = minIdle;
+ public DBConfiguration setMaxWaitTime(Long maxWaitTime) {
+ this.maxWaitTime = maxWaitTime;
return this;
}
+
}
diff --git a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLManager.java b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLRegistry.java
similarity index 71%
rename from easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLManager.java
rename to easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLRegistry.java
index 211c12f..6a8e9bc 100644
--- a/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLManager.java
+++ b/easysql-plugin-api/src/main/java/cc/carm/plugin/easysql/api/EasySQLRegistry.java
@@ -10,11 +10,12 @@ import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.UUID;
+import java.util.function.Consumer;
/**
* 入口类
*/
-public interface EasySQLManager {
+public interface EasySQLRegistry {
/**
* 获取原生注册的指定名称的 SQLManager 实例
@@ -75,15 +76,33 @@ public interface EasySQLManager {
@NotNull String propertyFileName) throws Exception;
/**
- * 终止一个 SQLManager 实例。
+ * 终止并关闭一个 SQLManager 实例。
*
- * @param manager
- * @return
+ * @param manager SQLManager实例
+ * @param activeQueries 终止前仍未被关闭的SQLQuery列表
*/
- default Map shutdown(SQLManager manager) {
- return shutdown(manager, true);
+ void shutdown(SQLManager manager, @Nullable Consumer