-
Notifications
You must be signed in to change notification settings - Fork 286
/
JdbiUtils.java
49 lines (44 loc) · 2.32 KB
/
JdbiUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package ai.verta.modeldb.common.db;
import ai.verta.modeldb.common.config.DatabaseConfig;
import ai.verta.modeldb.common.config.RdbConfig;
import ai.verta.modeldb.common.futures.FutureExecutor;
import ai.verta.modeldb.common.futures.FutureJdbi;
import ai.verta.modeldb.common.futures.InternalJdbi;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.metrics.prometheus.PrometheusMetricsTrackerFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.sql.DataSource;
import org.jdbi.v3.core.Jdbi;
public class JdbiUtils {
public static FutureJdbi initializeFutureJdbi(
DatabaseConfig databaseConfig, DataSource dataSource) {
final var jdbi = new InternalJdbi(Jdbi.create(dataSource));
final var dbExecutor =
FutureExecutor.initializeExecutor(databaseConfig.getThreadCount(), "jdbi");
return new FutureJdbi(jdbi, dbExecutor);
}
public static FutureJdbi initializeFutureJdbiWithFixedThreadpool(
DataSource dataSource, int poolSize) {
var jdbi = new InternalJdbi(Jdbi.create(dataSource));
ExecutorService executor = Executors.newFixedThreadPool(poolSize);
var dbExecutor = FutureExecutor.makeCompatibleExecutor(executor, "jdbi");
return new FutureJdbi(jdbi, dbExecutor);
}
public static DataSource initializeDataSource(DatabaseConfig databaseConfig, String poolName) {
final var hikariDataSource = new HikariDataSource();
final var dbUrl = RdbConfig.buildDatabaseConnectionString(databaseConfig.getRdbConfiguration());
hikariDataSource.setJdbcUrl(dbUrl);
hikariDataSource.setUsername(databaseConfig.getRdbConfiguration().getRdbUsername());
hikariDataSource.setPassword(databaseConfig.getRdbConfiguration().getRdbPassword());
hikariDataSource.setMinimumIdle(Integer.parseInt(databaseConfig.getMinConnectionPoolSize()));
hikariDataSource.setMaximumPoolSize(
Integer.parseInt(databaseConfig.getMaxConnectionPoolSize()));
hikariDataSource.setRegisterMbeans(true);
hikariDataSource.setMetricsTrackerFactory(new PrometheusMetricsTrackerFactory());
hikariDataSource.setPoolName(poolName);
hikariDataSource.setLeakDetectionThreshold(databaseConfig.getLeakDetectionThresholdMs());
hikariDataSource.setConnectionTimeout(databaseConfig.getConnectionTimeoutMillis());
return hikariDataSource;
}
}