Skip to content

Commit 048d89f

Browse files
committed
Update the project structure
1 parent f982ffd commit 048d89f

File tree

9 files changed

+136
-124
lines changed

9 files changed

+136
-124
lines changed

pom.xml

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>me.hteppl</groupId>
88
<artifactId>sql2o-nukkit</artifactId>
9-
<version>2.2.0-SNAPSHOT</version>
9+
<version>2.3.0-SNAPSHOT</version>
1010

1111
<properties>
1212
<maven.compiler.source>17</maven.compiler.source>
@@ -99,29 +99,34 @@
9999
<scope>provided</scope>
100100
</dependency>
101101
<dependency>
102-
<groupId>org.jdbi</groupId>
103-
<artifactId>jdbi3-core</artifactId>
104-
<version>3.42.0</version>
105-
</dependency>
106-
<dependency>
107-
<groupId>org.mariadb.jdbc</groupId>
108-
<artifactId>mariadb-java-client</artifactId>
109-
<version>3.3.1</version>
102+
<groupId>org.sql2o</groupId>
103+
<artifactId>sql2o</artifactId>
104+
<version>1.9.1</version>
110105
</dependency>
111106
<dependency>
112107
<groupId>com.zaxxer</groupId>
113108
<artifactId>HikariCP</artifactId>
114-
<version>5.1.0</version>
109+
<version>7.0.2</version>
110+
</dependency>
111+
<dependency>
112+
<groupId>org.postgresql</groupId>
113+
<artifactId>postgresql</artifactId>
114+
<version>42.7.7</version>
115+
</dependency>
116+
<dependency>
117+
<groupId>org.mariadb.jdbc</groupId>
118+
<artifactId>mariadb-java-client</artifactId>
119+
<version>3.5.5</version>
115120
</dependency>
116121
<dependency>
117122
<groupId>org.xerial</groupId>
118123
<artifactId>sqlite-jdbc</artifactId>
119-
<version>3.44.1.0</version>
124+
<version>3.50.3.0</version>
120125
</dependency>
121126
<dependency>
122127
<groupId>org.projectlombok</groupId>
123128
<artifactId>lombok</artifactId>
124-
<version>1.18.30</version>
129+
<version>1.18.38</version>
125130
<scope>provided</scope>
126131
</dependency>
127132
</dependencies>

src/main/java/me/hteppl/data/DataManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ public class DataManager extends PluginBase {
1212
@Override
1313
public void onEnable() {
1414
this.saveDefaultConfig();
15-
settings = new Settings(this.getConfig(), this.getDataFolder().getPath());
15+
settings = new Settings(this.getConfig());
1616
}
1717
}
Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,44 @@
11
package me.hteppl.data.database;
22

33
import lombok.Getter;
4-
import org.jdbi.v3.core.Handle;
5-
import org.jdbi.v3.core.Jdbi;
6-
import org.jdbi.v3.core.mapper.reflect.BeanMapper;
7-
import org.jdbi.v3.core.mapper.reflect.ConstructorMapper;
4+
import me.hteppl.data.utils.Create;
5+
import org.sql2o.Connection;
6+
import org.sql2o.Sql2o;
87

9-
import java.util.ArrayList;
10-
import java.util.List;
8+
import javax.sql.DataSource;
119

1210
@Getter
1311
public abstract class Database {
1412

15-
private final Jdbi jdbi;
13+
private final Sql2o sql2o;
1614

17-
public Database(Jdbi jdbi) {
18-
this.jdbi = jdbi;
19-
this.registerRowMappers();
20-
this.registerConstructorMappers();
15+
public Database(Sql2o sql2o) {
16+
this.sql2o = sql2o;
2117
}
2218

23-
public Handle getHandle() {
24-
return jdbi.open();
19+
public Database(DataSource ds) {
20+
this.sql2o = Create.createFromDataSource(ds);
2521
}
2622

27-
private void registerRowMappers() {
28-
List<Class<?>> mappers = new ArrayList<>();
29-
this.getRowMappers(mappers);
30-
for (Class<?> aClass : mappers) {
31-
jdbi.registerRowMapper(BeanMapper.factory(aClass));
32-
}
23+
public Connection openConnection() {
24+
return this.sql2o.open();
3325
}
3426

35-
private void registerConstructorMappers() {
36-
List<Class<?>> mappers = new ArrayList<>();
37-
this.getConstructorMappers(mappers);
38-
for (Class<?> aClass : mappers) {
39-
jdbi.registerRowMapper(ConstructorMapper.factory(aClass));
40-
}
27+
public Connection beginTransaction() {
28+
return this.sql2o.beginTransaction();
4129
}
4230

43-
protected void getRowMappers(List<Class<?>> classList) {
31+
public Connection beginTransaction(int isolationLevel) {
32+
return this.sql2o.beginTransaction(isolationLevel);
4433
}
4534

46-
protected void getConstructorMappers(List<Class<?>> classList) {
35+
public void execute(String rawQuery) {
36+
if (rawQuery == null || rawQuery.isEmpty()) return;
37+
38+
try (Connection connection = this.openConnection()) {
39+
connection.createQuery(rawQuery).executeUpdate();
40+
} catch (Exception e) {
41+
throw new RuntimeException("Failed to execute query: " + rawQuery, e);
42+
}
4743
}
48-
}
44+
}

src/main/java/me/hteppl/data/database/MySQLDatabase.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,18 @@
22

33
import me.hteppl.data.utils.Create;
44

5-
import javax.sql.DataSource;
6-
75
public class MySQLDatabase extends Database {
86

7+
// Default MySQL port is 3306
98
public MySQLDatabase(String host, String database, String user, String password) {
109
this(host, 3306, database, user, password);
1110
}
1211

1312
public MySQLDatabase(String host, int port, String database, String user, String password) {
14-
super(Create.createMySQL(host, port, database, user, password));
13+
super(Create.createMariaDB(host, port, database, user, password, null));
1514
}
1615

1716
public MySQLDatabase(String host, int port, String database, String user, String password, String properties) {
18-
super(Create.createMySQL(host, port, database, user, password, properties));
19-
}
20-
21-
public MySQLDatabase(DataSource ds) {
22-
super(Create.createByDataSource(ds));
17+
super(Create.createMariaDB(host, port, database, user, password, properties));
2318
}
2419
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.hteppl.data.database;
2+
3+
import me.hteppl.data.utils.Create;
4+
5+
public class PostgreSQLDatabase extends Database {
6+
7+
// Default PostgreSQL port is 5432
8+
public PostgreSQLDatabase(String host, String database, String user, String password) {
9+
this(host, 5432, database, user, password);
10+
}
11+
12+
public PostgreSQLDatabase(String host, int port, String database, String user, String password) {
13+
super(Create.createPostgreSQL(host, port, database, user, password, null));
14+
}
15+
16+
public PostgreSQLDatabase(String host, int port, String database, String user, String password, String properties) {
17+
super(Create.createPostgreSQL(host, port, database, user, password, properties));
18+
}
19+
}

src/main/java/me/hteppl/data/database/SQLiteDatabase.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,9 @@
22

33
import me.hteppl.data.utils.Create;
44

5-
import javax.sql.DataSource;
6-
75
public class SQLiteDatabase extends Database {
86

9-
public SQLiteDatabase(String database) {
10-
super(Create.createSQLite(database));
11-
}
12-
137
public SQLiteDatabase(String folder, String database) {
148
super(Create.createSQLite(folder, database));
159
}
16-
17-
public SQLiteDatabase(DataSource ds) {
18-
super(Create.createByDataSource(ds));
19-
}
2010
}

src/main/java/me/hteppl/data/utils/Create.java

Lines changed: 53 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.zaxxer.hikari.HikariDataSource;
55
import lombok.extern.log4j.Log4j2;
66
import me.hteppl.data.DataManager;
7-
import org.jdbi.v3.core.Jdbi;
7+
import org.sql2o.Sql2o;
88

99
import javax.sql.DataSource;
1010
import java.io.IOException;
@@ -14,58 +14,71 @@
1414
@Log4j2
1515
public class Create {
1616

17-
public static Jdbi createSQLite(String database) {
18-
return createSQLite(DataManager.getSettings().getSqliteDirectory(), database);
17+
/**
18+
* Helper method for PostgreSQL
19+
*/
20+
public static Sql2o createPostgreSQL(String host, int port, String database, String user, String password, String properties) {
21+
StringBuilder jdbcUrl = new StringBuilder("jdbc:postgresql://")
22+
.append(host).append(":").append(port).append("/").append(database);
23+
if (properties != null && !properties.isBlank()) {
24+
jdbcUrl.append("?").append(properties);
25+
}
26+
return createDataSource("org.postgresql.Driver", jdbcUrl.toString(), user, password);
27+
}
28+
29+
/**
30+
* Helper method for MariaDB
31+
*/
32+
public static Sql2o createMariaDB(String host, int port, String database, String user, String password, String properties) {
33+
StringBuilder jdbcUrl = new StringBuilder("jdbc:mariadb://")
34+
.append(host).append(":").append(port).append("/").append(database);
35+
if (properties != null && !properties.isBlank()) {
36+
jdbcUrl.append("?").append(properties);
37+
}
38+
return createDataSource("org.mariadb.jdbc.Driver", jdbcUrl.toString(), user, password);
1939
}
2040

21-
public static Jdbi createSQLite(String folder, String database) {
41+
/**
42+
* Helper method for SQLite
43+
*/
44+
public static Sql2o createSQLite(String folder, String database) {
2245
try {
2346
Class.forName("org.sqlite.JDBC");
2447
Files.createDirectories(Paths.get(folder));
25-
} catch (ClassNotFoundException ex) {
26-
throw new RuntimeException("Error while trying to load SQLite driver", ex);
27-
} catch (IOException ex) {
28-
throw new RuntimeException("Error while trying to create " + folder, ex);
48+
} catch (IOException | ClassNotFoundException ex) {
49+
throw new RuntimeException(ex);
2950
}
3051

31-
return Jdbi.create("jdbc:sqlite:" + folder + "/" + database + ".db");
32-
}
33-
34-
public static Jdbi createMySQL(String host, int port, String database, String user, String password) {
35-
return createMySQL(host, port, database, user, password, null);
52+
return new Sql2o("jdbc:sqlite:" + folder + "/" + database + ".db", null, null);
3653
}
3754

38-
public static Jdbi createMySQL(String host, int port, String database, String user, String password, String properties) {
55+
public static Sql2o createDataSource(String driverClass, String jdbcUrl, String user, String password) {
3956
try {
40-
Class.forName("org.mariadb.jdbc.Driver");
41-
} catch (ClassNotFoundException ex) {
42-
throw new RuntimeException("Error while trying to load MariaDB driver", ex);
57+
Class.forName(driverClass);
58+
} catch (ClassNotFoundException e) {
59+
throw new RuntimeException("Driver not found: " + driverClass, e);
4360
}
61+
HikariConfig config = new HikariConfig();
62+
Settings.HikariSettings hikari = DataManager.getSettings().getHikari();
4463

45-
try {
46-
var settings = DataManager.getSettings();
47-
var hikari = settings.getHikari();
48-
var config = new HikariConfig();
49-
50-
properties = properties != null && !properties.trim().isEmpty() ? "?" + properties : settings.getMysqlProperties();
51-
52-
config.setJdbcUrl("jdbc:mariadb://" + host + ":" + port + "/" + database + properties);
53-
config.setUsername(user);
54-
config.setPassword(password);
55-
config.setAutoCommit(hikari.autoCommit);
56-
config.setConnectionTimeout(hikari.connectionTimeout);
57-
config.setIdleTimeout(hikari.idleTimeout);
58-
config.setKeepaliveTime(hikari.keepaliveTime);
59-
config.setMaxLifetime(hikari.maxLifetime);
60-
config.setMaximumPoolSize(hikari.maximumPoolSize);
61-
62-
return createByDataSource(new HikariDataSource(config));
63-
} catch (Exception ex) {
64-
throw new RuntimeException(ex);
65-
}
64+
// jdbcUrl
65+
config.setJdbcUrl(jdbcUrl);
66+
// credentials
67+
config.setUsername(user);
68+
config.setPassword(password);
69+
// HikariConfig variables
70+
config.setMinimumIdle(hikari.minIdle);
71+
config.setMaximumPoolSize(hikari.maximumPoolSize);
72+
config.setMaxLifetime(hikari.maxLifetime);
73+
config.setConnectionTimeout(hikari.connectionTimeout);
74+
config.setValidationTimeout(hikari.validationTimeout);
75+
config.setIdleTimeout(hikari.idleTimeout);
76+
config.setAutoCommit(hikari.autoCommit);
77+
config.setKeepaliveTime(hikari.keepaliveTime);
78+
return new Sql2o(new HikariDataSource(config));
6679
}
6780

68-
public static Jdbi createByDataSource(DataSource ds) {
69-
return Jdbi.create(ds);
81+
public static Sql2o createFromDataSource(DataSource ds) {
82+
return new Sql2o(ds);
7083
}
7184
}

src/main/java/me/hteppl/data/utils/Settings.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,33 @@
77
@Getter
88
public class Settings {
99

10-
private final String sqliteDirectory;
11-
private final String mysqlProperties;
1210
private final HikariSettings hikari;
1311

14-
public Settings(Config config, String pluginPath) {
15-
String dir = config.getString("sqlite-directory", "database");
16-
this.sqliteDirectory = dir.trim().isEmpty() ? pluginPath : dir;
17-
this.mysqlProperties = config.getString("mysql-properties", "");
12+
public Settings(Config config) {
1813
this.hikari = new HikariSettings(config.getSection("hikari"));
1914
}
2015

2116
@Getter
2217
public static class HikariSettings {
2318

24-
public final boolean autoCommit;
19+
public final int minIdle;
20+
public final int maximumPoolSize;
21+
public final int maxLifetime;
2522
public final int connectionTimeout;
23+
public final int validationTimeout;
2624
public final int idleTimeout;
25+
public final boolean autoCommit;
2726
public final int keepaliveTime;
28-
public final int maxLifetime;
29-
public final int maximumPoolSize;
3027

3128
public HikariSettings(ConfigSection section) {
32-
this.autoCommit = section.getBoolean("auto-commit", true);
29+
this.maximumPoolSize = section.getInt("maximum-pool-size", 10);
30+
this.minIdle = section.getInt("min-idle", this.maximumPoolSize);
31+
this.maxLifetime = section.getInt("max-lifetime", 1800000);
3332
this.connectionTimeout = section.getInt("connection-timeout", 30000);
33+
this.validationTimeout = section.getInt("validation-timeout", 5000);
3434
this.idleTimeout = section.getInt("idle-timeout", 600000);
35+
this.autoCommit = section.getBoolean("auto-commit", true);
3536
this.keepaliveTime = section.getInt("keepalive-time", 0);
36-
this.maxLifetime = section.getInt("max-lifetime", 1800000);
37-
this.maximumPoolSize = section.getInt("maximum-pool-size", 10);
3837
}
3938
}
4039
}

src/main/resources/config.yml

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
1-
# sqlite directory name for anonymous databases
2-
# set empty, for creating database file in plugin's folder by default
3-
sqlite-directory: "database"
4-
5-
# default mysql connection properties
6-
mysql-properties: "sslMode=DISABLED&autoReconnect=true&useUnicode=true&serverTimezone=UTC"
7-
81
# Hikari connection pool settings (https://github.com/brettwooldridge/HikariCP)
92
hikari:
10-
auto-commit: true
11-
connection-timeout: 30000
12-
idle-timeout: 600000
13-
keepalive-time: 0
14-
max-lifetime: 1800000
15-
maximum-pool-size: 10
3+
min-idle: 10 # Minimum number of idle connections in the pool
4+
maximum-pool-size: 10 # Maximum number of connections in the pool
5+
max-lifetime: 1800000 # Maximum lifetime of a connection in milliseconds (30 minutes)
6+
connection-timeout: 30000 # Maximum time to wait for a connection in milliseconds (30 seconds)
7+
validation-timeout: 5000 # Timeout for connection validation in milliseconds (5 seconds)
8+
idle-timeout: 600000 # Maximum idle time for a connection in milliseconds (10 minutes)
9+
auto-commit: true # Should connections auto-commit by default
10+
keepalive-time: 0 # Keepalive time in milliseconds (0 = disabled)

0 commit comments

Comments
 (0)