Initial pool
This commit is contained in:
61
src/main/java/com/ilummc/tlib/db/Pool.java
Normal file
61
src/main/java/com/ilummc/tlib/db/Pool.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package com.ilummc.tlib.db;
|
||||
|
||||
import com.ilummc.tlib.TLib;
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import org.javalite.activejdbc.Base;
|
||||
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public final class Pool extends ThreadPoolExecutor {
|
||||
|
||||
private static final AtomicInteger number = new AtomicInteger(1);
|
||||
|
||||
private static final Pool singleton = new Pool();
|
||||
|
||||
private final TLibDataSource dataSource;
|
||||
|
||||
private Pool() {
|
||||
super(TLib.getTLib().getConfig().getMaximumPoolSize(),
|
||||
TLib.getTLib().getConfig().getMaximumPoolSize(),
|
||||
0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
|
||||
try {
|
||||
dataSource = new TLibDataSource();
|
||||
this.setThreadFactory(r -> new Thread(() -> {
|
||||
Base.open(dataSource.getDataSource());
|
||||
r.run();
|
||||
}, "TabooLib-DbPool-" + number.getAndIncrement()));
|
||||
prestartAllCoreThreads();
|
||||
TLocale.sendToConsole("DATABASE.CONNECTION-ESTABLISHED", dataSource.getDataSource().getConnection().getMetaData().getDatabaseProductName(),
|
||||
String.valueOf(TLib.getTLib().getConfig().getMaximumPoolSize()));
|
||||
} catch (Exception e) {
|
||||
TLocale.sendToConsole("DATABASE.CONNECTION-ERROR", e.toString());
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
public static void run(Runnable runnable) {
|
||||
instance().execute(runnable);
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
|
||||
}
|
||||
|
||||
public static void unload() {
|
||||
instance().dataSource.disconnect();
|
||||
instance().shutdown();
|
||||
}
|
||||
|
||||
public static Pool instance() {
|
||||
return singleton;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(Runnable r, Throwable t) {
|
||||
if (t != null) Base.close();
|
||||
}
|
||||
|
||||
}
|
||||
35
src/main/java/com/ilummc/tlib/db/TLibDataSource.java
Normal file
35
src/main/java/com/ilummc/tlib/db/TLibDataSource.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package com.ilummc.tlib.db;
|
||||
|
||||
import com.ilummc.tlib.TLib;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import org.javalite.activejdbc.Base;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TLibDataSource {
|
||||
|
||||
private final HikariDataSource dataSource;
|
||||
|
||||
TLibDataSource() {
|
||||
Properties properties = new Properties();
|
||||
properties.put("jdbcUrl", TLib.getTLib().getConfig().getJdbcUrl());
|
||||
properties.put("username", TLib.getTLib().getConfig().getUsername());
|
||||
properties.put("password", TLib.getTLib().getConfig().getPassword());
|
||||
properties.put("dataSourceClassName", TLib.getTLib().getConfig().getDataSourceClassName());
|
||||
properties.put("driverClassName", TLib.getTLib().getConfig().getDriverClassName());
|
||||
TLib.getTLib().getConfig().getSettings().forEach((k, v) -> properties.put("dataSource." + k, v));
|
||||
dataSource = new HikariDataSource(new HikariConfig(properties));
|
||||
Base.open(dataSource);
|
||||
}
|
||||
|
||||
public DataSource getDataSource() {
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
public void disconnect() {
|
||||
Base.close();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user