Skip to content

Commit b1c297c

Browse files
committed
add HikariCP
1 parent 4390b56 commit b1c297c

File tree

4 files changed

+91
-2
lines changed

4 files changed

+91
-2
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,11 @@
8181
<version>1.20.2-R0.1-SNAPSHOT</version>
8282
<scope>provided</scope>
8383
</dependency>
84+
<dependency>
85+
<groupId>com.zaxxer</groupId>
86+
<artifactId>HikariCP</artifactId>
87+
<version>5.1.0</version>
88+
<scope>compile</scope>
89+
</dependency>
8490
</dependencies>
8591
</project>

src/main/java/pro/cloudnode/smp/cloudnodemsg/CloudnodeMSG.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package pro.cloudnode.smp.cloudnodemsg;
22

3+
import com.zaxxer.hikari.HikariConfig;
4+
import com.zaxxer.hikari.HikariDataSource;
35
import org.bukkit.entity.Player;
46
import org.bukkit.metadata.MetadataValue;
57
import org.bukkit.plugin.java.JavaPlugin;
@@ -8,10 +10,11 @@
810
import pro.cloudnode.smp.cloudnodemsg.command.MainCommand;
911
import pro.cloudnode.smp.cloudnodemsg.command.MessageCommand;
1012
import pro.cloudnode.smp.cloudnodemsg.command.ReplyCommand;
13+
import pro.cloudnode.smp.cloudnodemsg.command.ToggleMessageCommand;
1114
import pro.cloudnode.smp.cloudnodemsg.command.UnIgnoreCommand;
1215
import pro.cloudnode.smp.cloudnodemsg.listener.AsyncChatListener;
13-
import pro.cloudnode.smp.cloudnodemsg.command.ToggleMessageCommand;
1416

17+
import java.util.Map;
1518
import java.util.Objects;
1619

1720
public final class CloudnodeMSG extends JavaPlugin {
@@ -22,6 +25,7 @@ public final class CloudnodeMSG extends JavaPlugin {
2225
public void reload() {
2326
getInstance().reloadConfig();
2427
getInstance().config.config = getInstance().getConfig();
28+
setupDbSource();
2529
}
2630

2731
@Override
@@ -41,7 +45,7 @@ public void onEnable() {
4145

4246
@Override
4347
public void onDisable() {
44-
// Plugin shutdown logic
48+
dbSource.close();
4549
}
4650

4751
public static boolean isVanished(final @NotNull Player player) {
@@ -55,4 +59,22 @@ public static boolean isVanished(final @NotNull Player player) {
5559
public @NotNull PluginConfig config() {
5660
return config;
5761
}
62+
63+
public final @NotNull HikariConfig hikariConfig = new HikariConfig();
64+
private HikariDataSource dbSource;
65+
66+
public @NotNull HikariDataSource db() {
67+
return dbSource;
68+
}
69+
70+
private void setupDbSource() {
71+
if (dbSource != null) dbSource.close();
72+
hikariConfig.setDriverClassName("org.sqlite.JDBC");
73+
hikariConfig.setJdbcUrl("jdbc:sqlite:" + getDataFolder().getAbsolutePath() + "/" + config().dbSqliteFile());
74+
75+
for (final @NotNull Map.Entry<@NotNull String, @NotNull String> entry : config().dbHikariProperties().entrySet())
76+
hikariConfig.addDataSourceProperty(entry.getKey(), entry.getValue());
77+
78+
dbSource = new HikariDataSource(hikariConfig);
79+
}
5880
}

src/main/java/pro/cloudnode/smp/cloudnodemsg/PluginConfig.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import org.bukkit.configuration.file.FileConfiguration;
77
import org.jetbrains.annotations.NotNull;
88

9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
import java.util.Map;
913
import java.util.Objects;
1014

1115
public final class PluginConfig {
@@ -15,6 +19,31 @@ public PluginConfig(final @NotNull FileConfiguration config) {
1519
this.config = config;
1620
}
1721

22+
/**
23+
* Database file name (in the plugin's folder)
24+
* <p>If the file does not exist, it will be created</p>
25+
*/
26+
public @NotNull String dbSqliteFile() {
27+
return Objects.requireNonNull(config.getString("db.sqlite.file"));
28+
}
29+
30+
/**
31+
* Advanced DB configuration / HikariCP properties
32+
* <p>Only change if you know what you're doing; you can add or remove any property you want</p>
33+
*/
34+
public @NotNull HashMap<@NotNull String, @NotNull String> dbHikariProperties() {
35+
final @NotNull List<@NotNull Map<?, ?>> mapList = config.getMapList("db.hikaricp");
36+
final @NotNull HashMap<@NotNull String, @NotNull String> properties = new HashMap<>(mapList.size());
37+
38+
for (final @NotNull Map<?, ?> map : mapList)
39+
if (
40+
map.get("name") instanceof final @NotNull String name
41+
&& map.get("value") instanceof final @NotNull String value
42+
) properties.put(name, value);
43+
44+
return properties;
45+
}
46+
1847
/**
1948
* Incoming message format (recipient's point of view)
2049
* <p>Placeholders:</p>

src/main/resources/config.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,35 @@
1+
# Database configuration
2+
db:
3+
sqlite:
4+
# Database file name (in the plugin's folder)
5+
# If the file does not exist, it will be created
6+
file: 'cloudnodemsg.db'
7+
8+
# Advanced DB configuration / HikariCP properties
9+
# Only change if you know what you're doing; you can add or remove any property you want
10+
hikaricp:
11+
- name: "cachePrepStmts"
12+
value: "true"
13+
- name: "prepStmtCacheSize"
14+
value: "250"
15+
- name: "prepStmtCacheSqlLimit"
16+
value: "2048"
17+
- name: "useServerPrepStmts"
18+
value: "true"
19+
- name: "useLocalSessionState"
20+
value: "true"
21+
- name: "rewriteBatchedStatements"
22+
value: "true"
23+
- name: "cacheResultSetMetadata"
24+
value: "true"
25+
- name: "cacheServerConfiguration"
26+
value: "true"
27+
- name: "elideSetAutoCommits"
28+
value: "true"
29+
- name: "maintainTimeStats"
30+
value: "false"
31+
32+
133
# Incoming message format (recipient's point of view)
234
# Placeholders:
335
# <sender> - the username of the message sender

0 commit comments

Comments
 (0)