mirror of
https://github.com/CarmJos/MineSQL.git
synced 2026-06-05 00:48:16 +08:00
修改实现方式
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
<?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>
|
||||
</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-core</artifactId>
|
||||
|
||||
<name>EasySQL-Plugin-Impl</name>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>${project.parent.groupId}</groupId>
|
||||
<artifactId>easysql-plugin-api</artifactId>
|
||||
<version>${project.parent.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<artifactId>easysql-impl</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<artifactId>githubreleases4j</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<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>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<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>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@@ -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("检查完成,当前已是最新版本。");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user