Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. package co.insou.pooling.data;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.SQLException;
  5. import java.util.concurrent.atomic.AtomicBoolean;
  6.  
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.configuration.file.FileConfiguration;
  9.  
  10. import com.zaxxer.hikari.HikariConfig;
  11. import com.zaxxer.hikari.HikariDataSource;
  12.  
  13. public final class PoolManager {
  14.  
  15. private final DataManager data;
  16. private final HikariConfig config;
  17.  
  18. private HikariDataSource dataSource;
  19. private AtomicBoolean started = new AtomicBoolean();
  20.  
  21. PoolManager(DataManager data) {
  22. this.data = data;
  23. this.config = this.buildConfig();
  24. this.loadDataSource();
  25. }
  26.  
  27. public Connection requestConnection() throws SQLException {
  28. if (!this.started.get()) {
  29. throw new IllegalStateException("Connection-Pool not loaded yet!");
  30. }
  31. return this.dataSource.getConnection();
  32. }
  33.  
  34. public boolean isStarted() {
  35. return this.started.get();
  36. }
  37.  
  38. public void shutdown() {
  39. this.started.set(false);
  40. this.dataSource.close();
  41. }
  42.  
  43. private void loadDataSource() {
  44. Bukkit.getScheduler().runTaskAsynchronously(this.data.getPlugin(), () -> {
  45. this.dataSource = new HikariDataSource(this.config);
  46. this.started.set(true);
  47. });
  48. }
  49.  
  50. private HikariConfig buildConfig() {
  51. HikariConfig config = new HikariConfig();
  52.  
  53. FileConfiguration fileConfig = this.data.getPlugin().getConfig();
  54.  
  55. config.setMaximumPoolSize(5);
  56. config.setMinimumIdle(5);
  57.  
  58. config.setJdbcUrl(this.buildUrl(
  59. fileConfig.getString("sql.hostname"),
  60. fileConfig.getString("sql.port"),
  61. fileConfig.getString("sql.database")
  62. ));
  63.  
  64. config.setUsername(fileConfig.getString("sql.username"));
  65. config.setPassword(fileConfig.getString("sql.password"));
  66.  
  67. return config;
  68. }
  69.  
  70. private String buildUrl(String hostname, String port, String database) {
  71. return String.format("jdbc:mysql://%s:%s/%s", hostname, port, database);
  72. }
  73.  
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement