feat: 添加redission

This commit is contained in:
2023-08-07 17:16:39 +08:00
parent 3064452c05
commit 0768161203
10 changed files with 164 additions and 16 deletions

View File

@@ -1,5 +1,3 @@
//file:noinspection GrDeprecatedAPIUsage
plugins {
id("java")
id("maven-publish")
@@ -36,7 +34,7 @@ subprojects {
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
withJavadocJar()
// withJavadocJar()
withSourcesJar()
}
@@ -98,5 +96,4 @@ subprojects {
}
}
}
}

View File

@@ -34,8 +34,14 @@ dependencies {
exclude(group = "org.jetbrains")
}
//noinspection GradlePackageUpdate
implementation("com.zaxxer:HikariCP:${property("HikariCP_version")}") {
val hikariVersion = property("HikariCP_version")
implementation("com.zaxxer:HikariCP:${hikariVersion}") {
exclude(group = "org.slf4j")
}
val redissionVersion = property("redission_version")
implementation("org.redisson:redisson:${redissionVersion}") {
exclude(group = "io.netty")
exclude(group = "org.yaml")
exclude(group = "org.slf4j")
}
}

View File

@@ -8,13 +8,24 @@ import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.jetbrains.annotations.NotNull;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Objects;
@SuppressWarnings("unused")
public final class CoreBukkitAPI extends CoreAPI {
private final HikariDataSource datasource;
private final RedissonClient redissonClient;
private CoreBukkitAPI() {
FileConfiguration config = HamsterCorePlugin.getInstance().getConfig();
HamsterCorePlugin plugin = HamsterCorePlugin.getInstance();
FileConfiguration config = plugin.getConfig();
ConfigurationSection datasourceConfig = config.getConfigurationSection("datasource");
if (datasourceConfig == null) {
@@ -36,8 +47,20 @@ public final class CoreBukkitAPI extends CoreAPI {
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000));
hikariConfig.setPoolName("HamsterCore-Pool");
datasource = new HikariDataSource(hikariConfig);
File file = new File(plugin.getDataFolder(), "redission.yml");
try {
if (!file.exists()) {
Files.copy(
Objects.requireNonNull(plugin.getResource("redission.yml")),
file.toPath(), StandardCopyOption.REPLACE_EXISTING
);
}
redissonClient = Redisson.create(Config.fromYAML(file));
} catch (IOException e) {
throw new RuntimeException("redis 连接加载失败!", e);
}
}
public static CoreBukkitAPI getInstance() {
@@ -61,9 +84,8 @@ public final class CoreBukkitAPI extends CoreAPI {
return datasource;
}
public void reportError(@NotNull String projectID, @NotNull Throwable exception) {
}
public void reportFile(@NotNull String projectID, @NotNull String filename, byte @NotNull [] bytes) {
@Override
public @NotNull RedissonClient getRedissonClient() {
return redissonClient;
}
}

View File

@@ -27,8 +27,14 @@ dependencies {
exclude(group = "org.jetbrains")
}
//noinspection GradlePackageUpdate
implementation("com.zaxxer:HikariCP:${property("HikariCP_version")}") {
val hikariVersion = property("HikariCP_version")
implementation("com.zaxxer:HikariCP:${hikariVersion}") {
exclude(group = "org.slf4j")
}
val redissionVersion = property("redission_version")
implementation("org.redisson:redisson:${redissionVersion}") {
exclude(group = "io.netty")
exclude(group = "org.yaml")
exclude(group = "org.slf4j")
}
}

View File

@@ -8,10 +8,19 @@ import com.zaxxer.hikari.HikariDataSource;
import net.kyori.adventure.platform.AudienceProvider;
import net.md_5.bungee.config.Configuration;
import org.jetbrains.annotations.NotNull;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
@SuppressWarnings("unused")
public final class CoreBungeeAPI extends CoreAPI {
private final HikariDataSource datasource;
private final RedissonClient redissonClient;
private CoreBungeeAPI() {
HamsterCorePlugin plugin = HamsterCorePlugin.getInstance();
@@ -37,8 +46,21 @@ public final class CoreBungeeAPI extends CoreAPI {
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000));
hikariConfig.setPoolName("HamsterCore-Pool");
datasource = new HikariDataSource(hikariConfig);
File file = new File(plugin.getDataFolder(), "redission.yml");
try {
if (!file.exists()) {
Files.copy(
plugin.getResourceAsStream("redission.yml"),
file.toPath(), StandardCopyOption.REPLACE_EXISTING
);
}
redissonClient = Redisson.create(Config.fromYAML(file));
} catch (IOException e) {
throw new RuntimeException("redis 连接加载失败!", e);
}
}
public static CoreBungeeAPI getInstance() {
@@ -61,4 +83,9 @@ public final class CoreBungeeAPI extends CoreAPI {
public @NotNull HikariDataSource getDataSource() {
return datasource;
}
@Override
public @NotNull RedissonClient getRedissonClient() {
return redissonClient;
}
}

View File

@@ -5,6 +5,7 @@ dependencies {
//noinspection GradlePackageUpdate
//noinspection VulnerableLibrariesLocal
compileOnly("com.google.code.gson:gson:2.8.0")
val adventureVersion = property("adventure_version")
// https://mvnrepository.com/artifact/net.kyori/adventure-platform-api
implementation("net.kyori:adventure-platform-api:${adventureVersion}") {
@@ -24,6 +25,13 @@ dependencies {
implementation("net.kyori:adventure-text-serializer-legacy:${adventureSerializerVersion}") {
exclude(group = "org.jetbrains")
}
val redissionVersion = property("redission_version")
implementation("org.redisson:redisson:${redissionVersion}") {
exclude(group = "io.netty")
exclude(group = "org.yaml")
exclude(group = "org.slf4j")
}
}
tasks {

View File

@@ -2,6 +2,7 @@ package cn.hamster3.mc.plugin.core.common.api;
import net.kyori.adventure.platform.AudienceProvider;
import org.jetbrains.annotations.NotNull;
import org.redisson.api.RedissonClient;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -25,4 +26,7 @@ public abstract class CoreAPI {
public Connection getConnection() throws SQLException {
return getDataSource().getConnection();
}
@NotNull
public abstract RedissonClient getRedissonClient();
}

View File

@@ -0,0 +1,41 @@
# 数据库链接驱动地址
# 除非你知道自己在做什么,否则不建议更改该项
# 旧版服务端低于1.13请使用com.mysql.jdbc.Driver
driver: "com.mysql.cj.jdbc.Driver"
# 数据库链接填写格式:
# jdbc:mysql://{数据库地址}:{数据库端口}/{使用的库名}?参数
# 除非你知道自己在做什么,否则不建议随意更改参数
url: "jdbc:mysql://sql.hamster3.cn:3306/Test1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
# 用户名
username: "Test"
# 密码
password: "Test123.."
# 最小闲置链接数
# 推荐值0~3
minimum-idle: 0
# 最大链接数
# 推荐值:
# 子服:最大在线玩家数/10且不低于3
# BC最大在线玩家数/20且不低于5
maximum-pool-size: 3
# 保持连接池可用的间隔
# 除非你的服务器数据库连接经常断开,否则不建议启用该选项
# 单位:毫秒
# 默认值为0禁用
keep-alive-time: 0
# 连接闲置回收时间
# 单位:毫秒
# 推荐值60000010分钟
idle-timeout: 600000
# 链接最长存活时间
# 单位:毫秒
max-lifetime: 1800000
# 验证连接存活的超时时间
# 单位:毫秒
validation-timeout: 5000
# 如果你不需要做多端跨服,那么请使用 sqlite 作本地数据库
# driver: "org.sqlite.JDBC"
# url: "jdbc:sqlite:./plugins/HamsterCore/database.db"

View File

@@ -0,0 +1,36 @@
singleServerConfig:
address: "redis://localhost:6379"
password: "Reids123.."
username: "default"
database: 1
clientName: ""
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
subscriptionsPerConnection: 5
sslEnableEndpointIdentification: true
sslProvider: "JDK"
pingConnectionInterval: 30000
keepAlive: false
tcpNoDelay: true
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
connectionMinimumIdleSize: 1
connectionPoolSize: 10
dnsMonitoringInterval: 5000
threads: 4
nettyThreads: 8
referenceEnabled: true
lockWatchdogTimeout: 30000
checkLockSyncedSlaves: true
slavesSyncTimeout: 1000
reliableTopicWatchdogTimeout: 600000
keepPubSubOrder: true
useScriptCache: false
minCleanUpDelay: 5
maxCleanUpDelay: 1800
cleanUpKeysAmount: 100
useThreadClassLoader: true
lazyInitialization: false

View File

@@ -2,3 +2,4 @@ org.gradle.jvmargs=-Xmx2G
adventure_version=4.3.0
adventure_serializer_version=4.14.0
HikariCP_version=4.0.3
redission_version=3.23.2