public class ConnectionPoolManager {
private final Main plugin;
private HikariDataSource dataSource;
private String hostname;
private String port;
private String database;
private String username;
private String password;
private int minimumConnections;
private int maximumConnections;
private long connectionTimeout;
private String testQuery;
public ConnectionPoolManager(Main plugin) {
this.plugin = plugin;
init();
setupPool();
}
private void init() {
hostname = plugin.getConfig().getSQLHostname();
port = plugin.getConfig().getSQLPort();
database = plugin.getConfig().getSQLDatabase();
username = plugin.getConfig().getSQLUsername();
password = plugin.getConfig().getSQLPassword();
minimumConnections = plugin.getConfig().getSQLPoolMinimumConnections();
maximumConnections = plugin.getConfig().getSQLPoolMaximumConnections();
connectionTimeout = plugin.getConfig().getSQLPoolConnectionTimeoutMillis();
testQuery = plugin.getConfig().getSQLPoolTestQuery();
}
private void setupPool() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(
"jdbc:mysql://" +
hostname +
":" +
port +
"/" +
database
);
config.setDriverClassName("com.mysql.jdbc.Driver");
config.setUsername(username);
config.setPassword(password);
config.setMinimumIdle(minimumConnections);
config.setMaximumPoolSize(maximumConnections);
config.setConnectionTimeout(connectionTimeout);
config.setConnectionTestQuery(testQuery);
dataSource = new HikariDataSource(config);
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public void close(Connection conn, PreparedStatement ps, ResultSet res) {
if (conn != null) try { conn.close(); } catch (SQLException ignored) {}
if (ps != null) try { ps.close(); } catch (SQLException ignored) {}
if (res != null) try { res.close(); } catch (SQLException ignored) {}
}
}
public class SQLManager {
private final Main plugin;
private final ConnectionPoolManager pool;
public SQLManager(Main plugin) {
this.plugin = plugin;
pool = new ConnectionPoolManager(plugin);
makeTable();
}
private void makeTable() {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = pool.getConnection();
ps = conn.prepareStatement(
"CREATE TABLE IF NOT EXISTS `Test` " +
"(" +
"UUID varchar(30)" +
")"
);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
pool.close(conn, ps, null);
}
}
}