Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package co.insou.pooling.data;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.concurrent.atomic.AtomicBoolean;
- import org.bukkit.Bukkit;
- import org.bukkit.configuration.file.FileConfiguration;
- import com.zaxxer.hikari.HikariConfig;
- import com.zaxxer.hikari.HikariDataSource;
- public final class PoolManager {
- private final DataManager data;
- private final HikariConfig config;
- private HikariDataSource dataSource;
- private AtomicBoolean started = new AtomicBoolean();
- PoolManager(DataManager data) {
- this.data = data;
- this.config = this.buildConfig();
- this.loadDataSource();
- }
- public Connection requestConnection() throws SQLException {
- if (!this.started.get()) {
- throw new IllegalStateException("Connection-Pool not loaded yet!");
- }
- return this.dataSource.getConnection();
- }
- public boolean isStarted() {
- return this.started.get();
- }
- public void shutdown() {
- this.started.set(false);
- this.dataSource.close();
- }
- private void loadDataSource() {
- Bukkit.getScheduler().runTaskAsynchronously(this.data.getPlugin(), () -> {
- this.dataSource = new HikariDataSource(this.config);
- this.started.set(true);
- });
- }
- private HikariConfig buildConfig() {
- HikariConfig config = new HikariConfig();
- FileConfiguration fileConfig = this.data.getPlugin().getConfig();
- config.setMaximumPoolSize(5);
- config.setMinimumIdle(5);
- config.setJdbcUrl(this.buildUrl(
- fileConfig.getString("sql.hostname"),
- fileConfig.getString("sql.port"),
- fileConfig.getString("sql.database")
- ));
- config.setUsername(fileConfig.getString("sql.username"));
- config.setPassword(fileConfig.getString("sql.password"));
- return config;
- }
- private String buildUrl(String hostname, String port, String database) {
- return String.format("jdbc:mysql://%s:%s/%s", hostname, port, database);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement