public static HikariDataSource hikari;
private boolean initialized = false;
public SQL(RDBMS rdbms, String username, String password, String host, int port, String database, String poolName, int maxConnections) {
initializeConnPool(rdbms, username, password, host, port, database, poolName, maxConnections); // Initialize pool
}
public SQL(DatabaseTemplate template, String poolName, int maxConnections) {
this(template.rdbms, template.username, template.password, template.host, template.port, template.database, poolName, maxConnections);
}
public Connection getIdleConnection() {
try {
return hikari.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public void killPool() {
try {
hikari.unwrap(HikariDataSource.class).close();
hikari.close();
} catch (SQLException e) {
System.err.println(" ____________________________________");
System.err.println("| |");
System.err.println("| The database pool failed to close! |");
System.err.println("|____________________________________|");
}
}
private void initializeConnPool(RDBMS rdbms, String username, String password, String host, int port, String database, String poolName, int maxConnections) {
if (initialized) return;
HikariConfig conf = new HikariConfig();
conf.setDriverClassName(rdbms.driver);
conf.setJdbcUrl("jdbc:" + rdbms.name().toLowerCase() + "://" + host + ":" + port + "/" + database);
conf.setUsername(username);
conf.setPassword(password);
conf.addDataSourceProperty("connectionTimeout", 30000);
conf.addDataSourceProperty("idleTimeout", 60000);
conf.addDataSourceProperty("maxLifetime", 90000);
conf.addDataSourceProperty("minimumIdle", Math.round(maxConnections / 4));
conf.addDataSourceProperty("maximumPoolSize", maxConnections);
if (!poolName.isEmpty()) conf.addDataSourceProperty("poolName", poolName);
hikari = new HikariDataSource(conf);
initialized = true;
}
static String username2 = Main.getInstance().getConfig().getString("MySQL.username");
static String password2 = Main.getInstance().getConfig().getString("MySQL.password");
static String host2 = Main.getInstance().getConfig().getString("MySQL.host");
static int port2 = Main.getInstance().getConfig().getInt("MySQL.port");
static String db2 = Main.getInstance().getConfig().getString("MySQL.database");
public enum DatabaseTemplate {
PROD(RDBMS.MYSQL, username2, password2, host2, port2, db2);
RDBMS rdbms;
String username, password, host, database;
int port;
DatabaseTemplate(RDBMS rdbms, String username, String password, String host, int port, String database) {
this.rdbms = rdbms;
this.username = username;
this.password = password;
this.host = host;
this.port = port;
this.database = database;
}
}
public enum RDBMS {
MYSQL("com.mysql.jdbc.Driver"), POSTGRESQL("org.postgresql.Driver");
String driver;
RDBMS(String driver) {
this.driver = driver;
}
}