mirror of
https://github.com/CarmJos/MineSQL.git
synced 2024-09-19 20:25:45 +00:00
修改实现方式
This commit is contained in:
parent
2f55d732ba
commit
c46d00d5c4
@ -19,7 +19,7 @@
|
|||||||
<artifactId>easysql-plugin-api</artifactId>
|
<artifactId>easysql-plugin-api</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>EasySQL-Plugin-API</name>
|
<name>EasySQL-Plugin-Common</name>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.plugin.easysql.api.EasySQLManager;
|
||||||
|
|
||||||
|
public class EasySQLAPI {
|
||||||
|
|
||||||
|
protected static EasySQLManager api;
|
||||||
|
|
||||||
|
protected static void init(EasySQLManager api) {
|
||||||
|
EasySQLAPI.api = api;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EasySQLManager get() {
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,247 @@
|
|||||||
|
package cc.carm.plugin.easysql.api;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DBConfiguration {
|
||||||
|
|
||||||
|
public DBConfiguration create(@NotNull SQLSourceType 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<String> defaultSettings;
|
||||||
|
private final @NotNull List<String> extraSettings;
|
||||||
|
|
||||||
|
private @NotNull String url;
|
||||||
|
|
||||||
|
private @Nullable String username;
|
||||||
|
private @Nullable String password;
|
||||||
|
|
||||||
|
private @Nullable String connectionInitSql;
|
||||||
|
private @Nullable String connectionTestQuery;
|
||||||
|
private @Nullable String poolName;
|
||||||
|
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 DBConfiguration(@NotNull String driverClass, @NotNull String urlPrefix,
|
||||||
|
@NotNull String url, @NotNull String[] defaultSettings) {
|
||||||
|
this.driverClassName = driverClass;
|
||||||
|
this.urlPrefix = urlPrefix;
|
||||||
|
this.url = url;
|
||||||
|
this.defaultSettings = Arrays.asList(defaultSettings);
|
||||||
|
this.extraSettings = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getDriverClassName() {
|
||||||
|
return driverClassName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getUrlPrefix() {
|
||||||
|
return urlPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull List<String> getDefaultSettings() {
|
||||||
|
return defaultSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull List<String> getExtraSettings() {
|
||||||
|
return extraSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setDefaultSettings(@Nullable String[] defaultSettings) {
|
||||||
|
this.defaultSettings.clear();
|
||||||
|
this.defaultSettings.addAll(Arrays.asList(defaultSettings));
|
||||||
|
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);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration clearExtraSettings() {
|
||||||
|
this.defaultSettings.clear();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getConnectionInitSql() {
|
||||||
|
return connectionInitSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setConnectionInitSql(String connectionInitSql) {
|
||||||
|
this.connectionInitSql = connectionInitSql;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getConnectionTestQuery() {
|
||||||
|
return connectionTestQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setConnectionTestQuery(String connectionTestQuery) {
|
||||||
|
this.connectionTestQuery = connectionTestQuery;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getPoolName() {
|
||||||
|
return poolName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setPoolName(String poolName) {
|
||||||
|
this.poolName = poolName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable String getSchema() {
|
||||||
|
return schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setSchema(String schema) {
|
||||||
|
this.schema = schema;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Boolean getAutoCommit() {
|
||||||
|
return autoCommit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setAutoCommit(Boolean autoCommit) {
|
||||||
|
this.autoCommit = autoCommit;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Boolean getReadOnly() {
|
||||||
|
return readOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setReadOnly(Boolean readOnly) {
|
||||||
|
this.readOnly = readOnly;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Long getConnectionTimeout() {
|
||||||
|
return connectionTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setConnectionTimeout(Long connectionTimeout) {
|
||||||
|
this.connectionTimeout = connectionTimeout;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Long getValidationTimeout() {
|
||||||
|
return validationTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setValidationTimeout(Long validationTimeout) {
|
||||||
|
this.validationTimeout = validationTimeout;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Long getIdleTimeout() {
|
||||||
|
return idleTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setIdleTimeout(Long idleTimeout) {
|
||||||
|
this.idleTimeout = idleTimeout;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Long getLeakDetectionThreshold() {
|
||||||
|
return leakDetectionThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Integer getMaxPoolSize() {
|
||||||
|
return maxPoolSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setMaxPoolSize(Integer maxPoolSize) {
|
||||||
|
this.maxPoolSize = maxPoolSize;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Integer getMinIdle() {
|
||||||
|
return minIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBConfiguration setMinIdle(Integer minIdle) {
|
||||||
|
this.minIdle = minIdle;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@ -1,62 +0,0 @@
|
|||||||
package cc.carm.plugin.easysql.api;
|
|
||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 入口类
|
|
||||||
*/
|
|
||||||
public interface EasySQLAPI {
|
|
||||||
/**
|
|
||||||
* 获取指定名称的 SQLManager 实例
|
|
||||||
* @param name 要获取的 SQLManager 实例名称
|
|
||||||
* @return SQLManager 实例
|
|
||||||
*/
|
|
||||||
@Nullable SQLManager getSQLManager(@Nullable String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取所有 SQLManager 实例
|
|
||||||
* @return SQLManager 实例集合
|
|
||||||
*/
|
|
||||||
@NotNull Map<String, SQLManager> getSQLManagers();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定名称的 SQLManager 实例的命名空间
|
|
||||||
* @param name SQLManager 名称
|
|
||||||
* @return 命名空间
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
String getNameSpace(@Nullable String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定 SQLManager 的注册名
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
* @return 注册名
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
String getName(@NotNull SQLManager sqlManager);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册 SQLManager 实例
|
|
||||||
* @param namespace 命名空间,通常为插件名称
|
|
||||||
* @param name 实例名称
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
void registerSQLManager(@NotNull String namespace,@NotNull String name, @NotNull SQLManager sqlManager);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定的 SQLManager 实例
|
|
||||||
* @param name 实例名称
|
|
||||||
*/
|
|
||||||
void unregisterSQLManager(@NotNull String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定命名空间下的所有 SQLManager 实例
|
|
||||||
* @param namespace 命名空间
|
|
||||||
*/
|
|
||||||
void unregisterSQLManagerAll(@NotNull String namespace);
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,89 @@
|
|||||||
|
package cc.carm.plugin.easysql.api;
|
||||||
|
|
||||||
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
|
import cc.carm.lib.easysql.api.SQLQuery;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.annotations.Unmodifiable;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入口类
|
||||||
|
*/
|
||||||
|
public interface EasySQLManager {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取原生注册的指定名称的 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @param name 要获取的 SQLManager 实例名称, 如果为 null 则获取首个实例
|
||||||
|
* @return {@link SQLManager} 实例
|
||||||
|
* @throws NullPointerException 若不存在对应实例则抛出空指针异常
|
||||||
|
*/
|
||||||
|
@NotNull SQLManager get(@Nullable String name) throws NullPointerException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取原生注册的指定名称的 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @param name 要获取的 SQLManager 实例名称, 如果为 null 则获取首个实例
|
||||||
|
* @return {@link SQLManager} 实例
|
||||||
|
*/
|
||||||
|
@NotNull Optional<@Nullable SQLManager> getOptional(@Nullable String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取某命名空间下所有 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @return {@link SQLManager} 实例集合
|
||||||
|
*/
|
||||||
|
@Unmodifiable
|
||||||
|
@NotNull Map<String, SQLManager> list();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建并注册一个新的 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @param name 实例名称
|
||||||
|
* @param configuration SQLManager 实例的配置
|
||||||
|
* @return {@link SQLManager} 实例
|
||||||
|
* @throws Exception 若创建失败则抛出异常
|
||||||
|
*/
|
||||||
|
@NotNull SQLManager create(@Nullable String name,
|
||||||
|
@NotNull DBConfiguration configuration) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建并注册一个新的 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @param name 实例名称
|
||||||
|
* @param properties SQLManager 实例的配置文件
|
||||||
|
* @return {@link SQLManager} 实例
|
||||||
|
* @throws Exception 若创建失败则抛出异常
|
||||||
|
*/
|
||||||
|
@NotNull SQLManager create(@Nullable String name,
|
||||||
|
@NotNull Properties properties) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建并注册一个新的 SQLManager 实例
|
||||||
|
*
|
||||||
|
* @param name 实例名称
|
||||||
|
* @param propertyFileName 配置文件的资源名称
|
||||||
|
* @return {@link SQLManager} 实例
|
||||||
|
* @throws Exception 若创建失败则抛出异常
|
||||||
|
*/
|
||||||
|
@NotNull SQLManager create(@Nullable String name,
|
||||||
|
@NotNull String propertyFileName) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 终止一个 SQLManager 实例。
|
||||||
|
*
|
||||||
|
* @param manager
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
default Map<UUID, SQLQuery> shutdown(SQLManager manager) {
|
||||||
|
return shutdown(manager, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<UUID, SQLQuery> shutdown(SQLManager manager, boolean forceClose);
|
||||||
|
|
||||||
|
}
|
@ -1,15 +0,0 @@
|
|||||||
package cc.carm.plugin.easysql.api;
|
|
||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface EasySQLPluginPlatform {
|
|
||||||
/**
|
|
||||||
* 获取 SQL 管理器
|
|
||||||
* @param name 注册键
|
|
||||||
* @return SQL管理器
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
SQLManager getSqlManager(@NotNull String name);
|
|
||||||
}
|
|
@ -0,0 +1,39 @@
|
|||||||
|
package cc.carm.plugin.easysql.api;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public enum SQLSourceType {
|
||||||
|
|
||||||
|
MARIADB("org.mariadb.jdbc.Driver", "jdbc:mariadb://", "mariadb", new String[]{}),
|
||||||
|
MYSQL("com.mysql.jdbc.Driver", "jdbc:mysql://", "mysql", new String[]{}),
|
||||||
|
H2("org.h2.Driver", "jdbc:h2:", "h2", new String[]{"MODE=MySQL", "DB_CLOSE_DELAY=-1"});
|
||||||
|
|
||||||
|
private final @NotNull String databaseID;
|
||||||
|
private final @NotNull String driverClass;
|
||||||
|
private final @NotNull String urlPrefix;
|
||||||
|
private final @NotNull String[] defaultSettings;
|
||||||
|
|
||||||
|
SQLSourceType(@NotNull String driverClass, @NotNull String urlPrefix,
|
||||||
|
@NotNull String databaseID, @NotNull String[] defaultSettings) {
|
||||||
|
this.databaseID = databaseID;
|
||||||
|
this.driverClass = driverClass;
|
||||||
|
this.urlPrefix = urlPrefix;
|
||||||
|
this.defaultSettings = defaultSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getDatabaseID() {
|
||||||
|
return databaseID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getDriverClass() {
|
||||||
|
return driverClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String getUrlPrefix() {
|
||||||
|
return urlPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String[] getDefaultSettings() {
|
||||||
|
return defaultSettings;
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@
|
|||||||
<maven.javadoc.skip>true</maven.javadoc.skip>
|
<maven.javadoc.skip>true</maven.javadoc.skip>
|
||||||
<maven.deploy.skip>true</maven.deploy.skip>
|
<maven.deploy.skip>true</maven.deploy.skip>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easysql-plugin-impl</artifactId>
|
<artifactId>easysql-plugin-core</artifactId>
|
||||||
|
|
||||||
<name>EasySQL-Plugin-Impl</name>
|
<name>EasySQL-Plugin-Impl</name>
|
||||||
|
|
||||||
@ -31,8 +31,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.chris2018998</groupId>
|
<groupId>com.zaxxer</groupId>
|
||||||
<artifactId>beecp</artifactId>
|
<artifactId>HikariCP</artifactId>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -48,7 +48,24 @@
|
|||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
|
<dependency>
|
||||||
|
<groupId>org.mariadb.jdbc</groupId>
|
||||||
|
<artifactId>mariadb-java-client</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
@ -0,0 +1,117 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
|
import cc.carm.lib.easysql.api.SQLQuery;
|
||||||
|
import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
||||||
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
|
import cc.carm.plugin.easysql.api.EasySQLManager;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.annotations.Unmodifiable;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class EasySQLManagerImpl implements EasySQLManager {
|
||||||
|
|
||||||
|
private final HashMap<String, SQLManager> sqlManagerRegistry = new HashMap<>();
|
||||||
|
|
||||||
|
public EasySQLManagerImpl(@NotNull EasySQLPluginPlatform platform) {
|
||||||
|
Map<String, DBConfiguration> configurations = platform.readConfigurations();
|
||||||
|
|
||||||
|
if (configurations.isEmpty()) {
|
||||||
|
platform.getLogger().warning("No database configurations found. Skipping SQLManager initialization.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
configurations.forEach((id, configuration) -> {
|
||||||
|
try {
|
||||||
|
SQLManager sqlManager = create(id, configuration);
|
||||||
|
this.sqlManagerRegistry.put(id, sqlManager);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
platform.getLogger().warning("Failed to initialize SQLManager #" + id + " .");
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull SQLManager get(@Nullable String id) throws NullPointerException {
|
||||||
|
if (!this.sqlManagerRegistry.containsKey(id)) {
|
||||||
|
throw new NullPointerException("SQLManager #" + id + " does not exist.");
|
||||||
|
}
|
||||||
|
return this.sqlManagerRegistry.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Optional<@Nullable SQLManager> getOptional(@Nullable String name) {
|
||||||
|
try {
|
||||||
|
return Optional.of(get(name));
|
||||||
|
} catch (Exception exception) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Unmodifiable
|
||||||
|
public @NotNull Map<String, SQLManager> list() {
|
||||||
|
return ImmutableMap.copyOf(this.sqlManagerRegistry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull SQLManager create(@Nullable String name, @NotNull DBConfiguration configuration) {
|
||||||
|
HikariConfig config = new HikariConfig();
|
||||||
|
config.setDriverClassName(configuration.getDriverClassName());
|
||||||
|
config.setJdbcUrl(configuration.getUrlPrefix() + configuration.getUrl());
|
||||||
|
|
||||||
|
Optional.ofNullable(configuration.getPoolName()).ifPresent(config::setPoolName);
|
||||||
|
Optional.ofNullable(configuration.getUsername()).ifPresent(config::setUsername);
|
||||||
|
Optional.ofNullable(configuration.getPassword()).ifPresent(config::setPassword);
|
||||||
|
Optional.ofNullable(configuration.getMaxPoolSize()).ifPresent(config::setMaximumPoolSize);
|
||||||
|
Optional.ofNullable(configuration.getMinIdle()).ifPresent(config::setMinimumIdle);
|
||||||
|
Optional.ofNullable(configuration.getIdleTimeout()).ifPresent(config::setIdleTimeout);
|
||||||
|
Optional.ofNullable(configuration.getKeepaliveTime()).ifPresent(config::setKeepaliveTime);
|
||||||
|
Optional.ofNullable(configuration.getConnectionTimeout()).ifPresent(config::setConnectionTimeout);
|
||||||
|
Optional.ofNullable(configuration.getValidationTimeout()).ifPresent(config::setValidationTimeout);
|
||||||
|
Optional.ofNullable(configuration.getMaxLifetime()).ifPresent(config::setMaxLifetime);
|
||||||
|
Optional.ofNullable(configuration.getLeakDetectionThreshold()).ifPresent(config::setLeakDetectionThreshold);
|
||||||
|
Optional.ofNullable(configuration.getConnectionTestQuery()).ifPresent(config::setConnectionTestQuery);
|
||||||
|
Optional.ofNullable(configuration.getConnectionInitSql()).ifPresent(config::setConnectionInitSql);
|
||||||
|
Optional.ofNullable(configuration.getAutoCommit()).ifPresent(config::setAutoCommit);
|
||||||
|
Optional.ofNullable(configuration.getReadOnly()).ifPresent(config::setReadOnly);
|
||||||
|
Optional.ofNullable(configuration.getSchema()).ifPresent(config::setSchema);
|
||||||
|
|
||||||
|
return create(name, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull SQLManager create(@Nullable String name, @NotNull Properties properties) {
|
||||||
|
return create(name, new HikariConfig(properties));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull SQLManager create(@Nullable String name, @NotNull String propertyFileName) {
|
||||||
|
return create(name, new HikariConfig(propertyFileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SQLManager create(@Nullable String name, @NotNull HikariConfig configuration) {
|
||||||
|
return new SQLManagerImpl(new HikariDataSource(configuration), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<UUID, SQLQuery> shutdown(SQLManager manager, boolean forceClose) {
|
||||||
|
Map<UUID, SQLQuery> queries = manager.getActiveQuery();
|
||||||
|
if (forceClose) manager.getActiveQuery().values().forEach(SQLQuery::close);
|
||||||
|
|
||||||
|
if (manager.getDataSource() instanceof HikariDataSource) {
|
||||||
|
//Close hikari pool
|
||||||
|
((HikariDataSource) manager.getDataSource()).close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return queries;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public interface EasySQLPluginPlatform {
|
||||||
|
|
||||||
|
@NotNull Map<String, DBConfiguration> readConfigurations();
|
||||||
|
|
||||||
|
Logger getLogger();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
|
import cc.carm.lib.githubreleases4j.GithubReleases4J;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class UpdateChecker {
|
||||||
|
|
||||||
|
public static final String REPO_OWNER = "CarmJos";
|
||||||
|
public static final String REPO_NAME = "EasySQL-Plugin";
|
||||||
|
|
||||||
|
public void checkUpdate(Logger logger, String currentVersion) {
|
||||||
|
Integer behindVersions = GithubReleases4J.getVersionBehind(REPO_OWNER, REPO_NAME, currentVersion);
|
||||||
|
String downloadURL = GithubReleases4J.getReleasesURL(REPO_OWNER, REPO_NAME);
|
||||||
|
if (behindVersions == null) {
|
||||||
|
logger.severe("检查更新失败,请您定期查看插件是否更新,避免安全问题。");
|
||||||
|
logger.severe("下载地址 " + downloadURL);
|
||||||
|
} else if (behindVersions < 0) {
|
||||||
|
logger.severe("检查更新失败! 当前版本未知,请您使用原生版本以避免安全问题。");
|
||||||
|
logger.severe("最新版下载地址 " + downloadURL);
|
||||||
|
} else if (behindVersions > 0) {
|
||||||
|
logger.warning("发现新版本! 目前已落后 " + behindVersions + " 个版本。");
|
||||||
|
logger.warning("最新版下载地址 " + downloadURL);
|
||||||
|
} else {
|
||||||
|
logger.info("检查完成,当前已是最新版本。");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
18
easysql-plugin-core/src/main/resources/config.yml
Normal file
18
easysql-plugin-core/src/main/resources/config.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# 检查更新设定
|
||||||
|
# 该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。
|
||||||
|
# 检查更新为异步操作,绝不会影响性能与使用体验。
|
||||||
|
check-update: true
|
||||||
|
|
||||||
|
|
||||||
|
instances:
|
||||||
|
name1:
|
||||||
|
|
||||||
|
url: jdbc:mysql://localhost:3306/name1
|
||||||
|
port: 3306
|
||||||
|
username: mc
|
||||||
|
password: password
|
||||||
|
use-ssl: false
|
||||||
|
name2:
|
||||||
|
url: jdbc:mysql://localhost:3306/name2
|
||||||
|
username: mc
|
||||||
|
password: password
|
@ -1,141 +0,0 @@
|
|||||||
package cc.carm.plugin.easysql;
|
|
||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
|
||||||
import cc.carm.plugin.easysql.api.EasySQLAPI;
|
|
||||||
import cc.carm.plugin.easysql.api.EasySQLPluginPlatform;
|
|
||||||
import com.google.common.collect.BiMap;
|
|
||||||
import com.google.common.collect.HashBiMap;
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
|
|
||||||
public class EasySQLManager implements EasySQLAPI {
|
|
||||||
public static final String VERSION = "1.0.0";
|
|
||||||
private final Lock LOCK =new ReentrantLock();
|
|
||||||
private final BiMap<String, Set<String>> nameSpaceRegistry = HashBiMap.create();
|
|
||||||
private final BiMap<String, SQLManager> sqlManagerRegistry = HashBiMap.create();
|
|
||||||
|
|
||||||
// 这个主要是避免外部插件注册此 EasySQLManager
|
|
||||||
// 没有其他意义
|
|
||||||
public EasySQLManager(@NotNull EasySQLPluginPlatform pluginPlatform){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定名称的 SQLManager 实例
|
|
||||||
*
|
|
||||||
* @param name 要获取的 SQLManager 实例名称
|
|
||||||
* @return SQLManager 实例
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public @Nullable SQLManager getSQLManager(@Nullable String name) {
|
|
||||||
LOCK.lock();
|
|
||||||
SQLManager sqlManager = this.sqlManagerRegistry.get(name);
|
|
||||||
LOCK.unlock();
|
|
||||||
return sqlManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取所有 SQLManager 实例
|
|
||||||
*
|
|
||||||
* @return SQLManager 实例集合
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public @NotNull Map<String, SQLManager> getSQLManagers() {
|
|
||||||
return ImmutableMap.copyOf(this.sqlManagerRegistry);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定名称的 SQLManager 实例的命名空间
|
|
||||||
*
|
|
||||||
* @param name SQLManager 名称
|
|
||||||
* @return 命名空间
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public @Nullable String getNameSpace(@Nullable String name) {
|
|
||||||
LOCK.lock();
|
|
||||||
String namespace = null;
|
|
||||||
for (Map.Entry<String, Set<String>> stringSetEntry : this.nameSpaceRegistry.entrySet()) {
|
|
||||||
if (stringSetEntry.getValue().contains(name)) {
|
|
||||||
namespace = stringSetEntry.getKey();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LOCK.unlock();
|
|
||||||
return namespace;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定 SQLManager 的注册名
|
|
||||||
*
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
* @return 注册名
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public @Nullable String getName(@NotNull SQLManager sqlManager) {
|
|
||||||
LOCK.lock();
|
|
||||||
String name = sqlManagerRegistry.inverse().get(sqlManager);
|
|
||||||
LOCK.unlock();
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册 SQLManager 实例
|
|
||||||
*
|
|
||||||
* @param namespace 命名空间,通常为插件名称
|
|
||||||
* @param name 实例名称
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void registerSQLManager(@NotNull String namespace, @NotNull String name, @NotNull SQLManager sqlManager) {
|
|
||||||
LOCK.lock();
|
|
||||||
// 注册命名空间
|
|
||||||
this.sqlManagerRegistry.put(name, sqlManager);
|
|
||||||
// 注册名称
|
|
||||||
this.nameSpaceRegistry.putIfAbsent(namespace, this.nameSpaceRegistry.getOrDefault(namespace, new HashSet<>()));
|
|
||||||
// 注册名称 -> 命名空间
|
|
||||||
this.nameSpaceRegistry.get(namespace).add(name);
|
|
||||||
LOCK.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定的 SQLManager 实例
|
|
||||||
*
|
|
||||||
* @param name 实例名称
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void unregisterSQLManager(@NotNull String name) {
|
|
||||||
LOCK.lock();
|
|
||||||
for (Map.Entry<String, Set<String>> stringSetEntry : this.nameSpaceRegistry.entrySet()) {
|
|
||||||
stringSetEntry.getValue().remove(name);
|
|
||||||
}
|
|
||||||
this.nameSpaceRegistry.entrySet().removeIf(stringSetEntry -> stringSetEntry.getValue().isEmpty());
|
|
||||||
LOCK.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定命名空间下的所有 SQLManager 实例
|
|
||||||
*
|
|
||||||
* @param namespace 命名空间
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void unregisterSQLManagerAll(@NotNull String namespace) {
|
|
||||||
LOCK.lock();
|
|
||||||
Set<String> names = this.nameSpaceRegistry.get(namespace);
|
|
||||||
if (names != null) {
|
|
||||||
// 删除所有的 SQLManager 实例
|
|
||||||
for (String name : names) {
|
|
||||||
this.sqlManagerRegistry.remove(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 删除命名空间
|
|
||||||
this.nameSpaceRegistry.remove(namespace);
|
|
||||||
LOCK.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
package cc.carm.plugin.easysql.hook;
|
|
||||||
|
|
||||||
public class UpdateChecker {
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
instances:
|
|
||||||
name1:
|
|
||||||
url: jdbc:mysql://localhost:3306/name1
|
|
||||||
username: mc
|
|
||||||
password: password
|
|
||||||
name2:
|
|
||||||
url: jdbc:mysql://localhost:3306/name2
|
|
||||||
username: mc
|
|
||||||
password: password
|
|
@ -29,11 +29,17 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easysql-plugin-impl</artifactId>
|
<artifactId>easysql-plugin-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>easyplugin-main</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
|
@ -1,121 +1,28 @@
|
|||||||
package cc.carm.plugin.easysql;
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.lib.easyplugin.EasyPlugin;
|
||||||
import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
import cc.carm.plugin.easysql.api.EasySQLAPI;
|
|
||||||
import cc.carm.plugin.easysql.api.EasySQLPluginPlatform;
|
|
||||||
import cn.beecp.BeeDataSource;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.server.PluginDisableEvent;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public class EasySQLBukkit extends JavaPlugin implements EasySQLPluginPlatform, Listener {
|
import java.util.HashMap;
|
||||||
private EasySQLAPI apiImpl;
|
import java.util.Map;
|
||||||
|
|
||||||
private boolean setup = false;
|
public class EasySQLBukkit extends EasyPlugin implements EasySQLPluginPlatform, Listener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void load() {
|
||||||
|
|
||||||
public void setup() {
|
|
||||||
if (setup) return;
|
|
||||||
apiImpl = new EasySQLManager(this);
|
|
||||||
saveDefaultConfig();
|
|
||||||
// 读取配置文件 - 预注册 instance
|
|
||||||
ConfigurationSection instancesConfig = getConfig().getConfigurationSection("instances");
|
|
||||||
if (instancesConfig != null) {
|
|
||||||
for (String instanceName : instancesConfig.getKeys(false)) {
|
|
||||||
SQLManager sqlManager = new SQLManagerImpl(
|
|
||||||
new BeeDataSource("com.mysql.jdbc.Driver"
|
|
||||||
, instancesConfig.getString("url")
|
|
||||||
, instancesConfig.getString("username")
|
|
||||||
, instancesConfig.getString("password")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
this.register(this, instanceName, sqlManager);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 获取指定UUID的玩家的盔甲
|
|
||||||
setup = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
protected boolean initialize() {
|
||||||
setup(); // 尽可能早的初始化预注册的 SQLManager
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public @NotNull Map<String, DBConfiguration> readConfigurations() {
|
||||||
setup(); // 在特定情况下 Bukkit 可能不会调用 onLoad 函数
|
return new HashMap<>();
|
||||||
Bukkit.getPluginManager().registerEvents(this,this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDisable() {
|
|
||||||
getLogger().info("Shutting down...");
|
|
||||||
this.unregister(this);
|
|
||||||
apiImpl.getSQLManagers().keySet().forEach(apiImpl::unregisterSQLManager);
|
|
||||||
super.onDisable();
|
|
||||||
}
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPluginDisable(PluginDisableEvent event){
|
|
||||||
this.unregister(event.getPlugin());
|
|
||||||
}
|
|
||||||
// =========== 平台注册方法 ===========
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册 SQLManager 实例
|
|
||||||
* @param plugin 插件实例
|
|
||||||
* @param name SQLManager 映射名称
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
public void register(@NotNull Plugin plugin, @NotNull String name, @NotNull SQLManager sqlManager){
|
|
||||||
if(this.apiImpl.getSQLManagers().containsKey(name)){
|
|
||||||
// 名称冲突处理
|
|
||||||
throw new IllegalArgumentException("Instance name conflict: " + name+", Already registered by "+this.apiImpl.getNameSpace(name));
|
|
||||||
}
|
|
||||||
this.apiImpl.registerSQLManager(plugin.getDescription().getName(), name, sqlManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定 SQLManager 实例
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull SQLManager sqlManager){
|
|
||||||
String name = this.apiImpl.getName(sqlManager);
|
|
||||||
if(name != null){
|
|
||||||
this.apiImpl.unregisterSQLManager(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定名称的 SQLManager
|
|
||||||
* @param name SQLManager 名称
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull String name){
|
|
||||||
this.apiImpl.unregisterSQLManager(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定插件注册的所有 SQLManager 实例
|
|
||||||
* @param plugin 插件
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull Plugin plugin){
|
|
||||||
this.apiImpl.unregisterSQLManagerAll(plugin.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 SQL 管理器
|
|
||||||
*
|
|
||||||
* @param name 注册键
|
|
||||||
* @return SQL管理器
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public @Nullable SQLManager getSqlManager(@NotNull String name) {
|
|
||||||
return this.apiImpl.getSQLManager(name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easysql-plugin-impl</artifactId>
|
<artifactId>easysql-plugin-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -1,24 +1,20 @@
|
|||||||
package cc.carm.plugin.easysql;
|
package cc.carm.plugin.easysql;
|
||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.plugin.easysql.api.DBConfiguration;
|
||||||
import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
|
||||||
import cc.carm.plugin.easysql.api.EasySQLAPI;
|
|
||||||
import cc.carm.plugin.easysql.api.EasySQLPluginPlatform;
|
|
||||||
import cn.beecp.BeeDataSource;
|
|
||||||
import net.md_5.bungee.api.plugin.Plugin;
|
import net.md_5.bungee.api.plugin.Plugin;
|
||||||
import net.md_5.bungee.config.Configuration;
|
import net.md_5.bungee.config.Configuration;
|
||||||
import net.md_5.bungee.config.ConfigurationProvider;
|
import net.md_5.bungee.config.ConfigurationProvider;
|
||||||
import net.md_5.bungee.config.YamlConfiguration;
|
import net.md_5.bungee.config.YamlConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class EasySQLBungee extends Plugin implements EasySQLPluginPlatform {
|
public class EasySQLBungee extends Plugin implements EasySQLPluginPlatform {
|
||||||
private EasySQLAPI apiImpl;
|
|
||||||
|
|
||||||
private boolean setup = false;
|
private boolean setup = false;
|
||||||
|
|
||||||
@ -40,7 +36,6 @@ public class EasySQLBungee extends Plugin implements EasySQLPluginPlatform {
|
|||||||
|
|
||||||
public void setup() {
|
public void setup() {
|
||||||
if (setup) return;
|
if (setup) return;
|
||||||
apiImpl = new EasySQLManager(this);
|
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
// 读取配置文件 - 预注册 instance
|
// 读取配置文件 - 预注册 instance
|
||||||
Configuration configuration;
|
Configuration configuration;
|
||||||
@ -52,16 +47,6 @@ public class EasySQLBungee extends Plugin implements EasySQLPluginPlatform {
|
|||||||
}
|
}
|
||||||
Configuration instancesConfig = configuration.getSection("instances");
|
Configuration instancesConfig = configuration.getSection("instances");
|
||||||
if (instancesConfig != null) {
|
if (instancesConfig != null) {
|
||||||
for (String instanceName : instancesConfig.getKeys()) {
|
|
||||||
SQLManager sqlManager = new SQLManagerImpl(
|
|
||||||
new BeeDataSource("com.mysql.jdbc.Driver"
|
|
||||||
, instancesConfig.getString("url")
|
|
||||||
, instancesConfig.getString("username")
|
|
||||||
, instancesConfig.getString("password")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
this.register(this, instanceName, sqlManager);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setup = true;
|
setup = true;
|
||||||
}
|
}
|
||||||
@ -75,64 +60,15 @@ public class EasySQLBungee extends Plugin implements EasySQLPluginPlatform {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
setup();
|
setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
getLogger().info("Shutting down...");
|
getLogger().info("Shutting down...");
|
||||||
this.unregister(this);
|
|
||||||
apiImpl.getSQLManagers().keySet().forEach(apiImpl::unregisterSQLManager);
|
|
||||||
super.onDisable();
|
|
||||||
}
|
|
||||||
// =========== 平台注册方法 ===========
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册 SQLManager 实例
|
|
||||||
* @param plugin 插件实例
|
|
||||||
* @param name SQLManager 映射名称
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
public void register(@NotNull Plugin plugin, @NotNull String name, @NotNull SQLManager sqlManager){
|
|
||||||
if(this.apiImpl.getSQLManagers().containsKey(name)){
|
|
||||||
// 名称冲突处理
|
|
||||||
throw new IllegalArgumentException("Instance name conflict: " + name+", Already registered by "+this.apiImpl.getNameSpace(name));
|
|
||||||
}
|
|
||||||
this.apiImpl.registerSQLManager(plugin.getDescription().getName(), name, sqlManager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定 SQLManager 实例
|
|
||||||
* @param sqlManager SQLManager 实例
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull SQLManager sqlManager){
|
|
||||||
String name = this.apiImpl.getName(sqlManager);
|
|
||||||
if(name != null){
|
|
||||||
this.apiImpl.unregisterSQLManager(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定名称的 SQLManager
|
|
||||||
* @param name SQLManager 名称
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull String name){
|
|
||||||
this.apiImpl.unregisterSQLManager(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 注销指定插件注册的所有 SQLManager 实例
|
|
||||||
* @param plugin 插件
|
|
||||||
*/
|
|
||||||
public void unregister(@NotNull Plugin plugin){
|
|
||||||
this.apiImpl.unregisterSQLManagerAll(plugin.getDescription().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 SQL 管理器
|
|
||||||
*
|
|
||||||
* @param name 注册键
|
|
||||||
* @return SQL管理器
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable SQLManager getSqlManager(@NotNull String name) {
|
public @NotNull Map<String, DBConfiguration> readConfigurations() {
|
||||||
return this.apiImpl.getSQLManager(name);
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,88 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<parent>
|
|
||||||
<artifactId>easysql-plugin</artifactId>
|
|
||||||
<groupId>cc.carm.plugin</groupId>
|
|
||||||
<version>0.0.2</version>
|
|
||||||
<relativePath>../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
|
||||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
|
||||||
<maven.javadoc.skip>true</maven.javadoc.skip>
|
|
||||||
<maven.deploy.skip>true</maven.deploy.skip>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<artifactId>easysql-plugin-fabric</artifactId>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
|
|
||||||
<name>EasySQL-Plugin-Fabric</name>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
|
||||||
<artifactId>easysql-plugin-impl</artifactId>
|
|
||||||
<version>${project.parent.version}</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-source-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
|
||||||
<version>3.2.3</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>package</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>shade</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
|
||||||
<finalName>${project.name}-${project.version}</finalName>
|
|
||||||
<outputDirectory>${project.parent.basedir}/asset/</outputDirectory>
|
|
||||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
|
||||||
<filters>
|
|
||||||
<filter>
|
|
||||||
<artifact>*:*</artifact>
|
|
||||||
<excludes>
|
|
||||||
<exclude>META-INF/MANIFEST.MF</exclude>
|
|
||||||
<exclude>META-INF/*.txt</exclude>
|
|
||||||
</excludes>
|
|
||||||
</filter>
|
|
||||||
</filters>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,10 +0,0 @@
|
|||||||
package cc.carm.plugin.easysql;
|
|
||||||
|
|
||||||
public class EasySQLFabric {
|
|
||||||
|
|
||||||
|
|
||||||
// Sadly I don't know how to create a fabric plugins,
|
|
||||||
// If you know how to make a fabric plugin , just contribute your code here!
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easysql-plugin-impl</artifactId>
|
<artifactId>easysql-plugin-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -10,9 +10,11 @@ import com.velocitypowered.api.proxy.ProxyServer;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
|
||||||
@Plugin(id = "easysql-plugin", name = "EasySQL Plugin For Velocity", version = "1.0.0",
|
@Plugin(id = "easysql-plugin", name = "EasySQL-Plugin",
|
||||||
description = "",
|
version = "1.0.0",
|
||||||
url = "https://github.com/CarmJos/EasySQL-Plugin", authors = "CarmJos"
|
description = "EasySQL Plugin For Velocity",
|
||||||
|
url = "https://github.com/CarmJos/EasySQL-Plugin",
|
||||||
|
authors = {"CarmJos", "GhostChu"}
|
||||||
)
|
)
|
||||||
public class EasySQLVelocity {
|
public class EasySQLVelocity {
|
||||||
|
|
||||||
|
53
pom.xml
53
pom.xml
@ -10,8 +10,9 @@
|
|||||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
<easyplugin.version>1.3.7</easyplugin.version>
|
<easysql.version>0.3.6</easysql.version>
|
||||||
<easysql.version>0.3.5</easysql.version>
|
<easyplugin.version>1.3.8</easyplugin.version>
|
||||||
|
<hikaricp.version>4.0.3</hikaricp.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
@ -19,15 +20,12 @@
|
|||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>0.0.2</version>
|
<version>0.0.2</version>
|
||||||
<modules>
|
<modules>
|
||||||
|
|
||||||
<module>easysql-plugin-api</module>
|
<module>easysql-plugin-api</module>
|
||||||
<module>easysql-plugin-impl</module>
|
<module>easysql-plugin-core</module>
|
||||||
|
|
||||||
<module>platforms/easysql-plugin-bukkit</module>
|
<module>platforms/easysql-plugin-bukkit</module>
|
||||||
<module>platforms/easysql-plugin-bungee</module>
|
<module>platforms/easysql-plugin-bungee</module>
|
||||||
<module>platforms/easysql-plugin-fabric</module>
|
|
||||||
<module>platforms/easysql-plugin-velocity</module>
|
<module>platforms/easysql-plugin-velocity</module>
|
||||||
|
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<name>EasySQL-Plugin</name>
|
<name>EasySQL-Plugin</name>
|
||||||
@ -126,23 +124,17 @@
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.chris2018998</groupId>
|
<!--项目地址 https://github.com/brettwooldridge/HikariCP/ -->
|
||||||
<artifactId>beecp</artifactId>
|
<groupId>com.zaxxer</groupId>
|
||||||
<version>3.3.1</version>
|
<artifactId>HikariCP</artifactId>
|
||||||
<scope>compile</scope>
|
<version>${hikaricp.version}</version>
|
||||||
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>githubreleases4j</artifactId>
|
<artifactId>githubreleases4j</artifactId>
|
||||||
<version>1.3.0</version>
|
<version>1.3.0</version>
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>easyplugin-main</artifactId>
|
|
||||||
<version>${easyplugin.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -157,6 +149,12 @@
|
|||||||
<version>${easysql.version}</version>
|
<version>${easysql.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>easyplugin-main</artifactId>
|
||||||
|
<version>${easyplugin.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
|
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
@ -164,6 +162,27 @@
|
|||||||
<version>31.0.1-jre</version>
|
<version>31.0.1-jre</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mariadb.jdbc</groupId>
|
||||||
|
<artifactId>mariadb-java-client</artifactId>
|
||||||
|
<version>3.0.3</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>8.0.28</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<version>2.1.210</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
Loading…
Reference in New Issue
Block a user