diff options
author | Trumeet <yuuta@yuuta.moe> | 2021-04-01 20:38:24 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2021-04-01 20:38:24 -0700 |
commit | 2dbbabd1eaee288c7ffc6188a3f0a1691f1a187c (patch) | |
tree | 7c21698cd36002195f8cb4ab57d40e22eff7e3c6 | |
parent | 86db0a076d034624bf3ebac189161203b8d00e8f (diff) | |
download | dn42peering-2dbbabd1eaee288c7ffc6188a3f0a1691f1a187c.tar dn42peering-2dbbabd1eaee288c7ffc6188a3f0a1691f1a187c.tar.gz dn42peering-2dbbabd1eaee288c7ffc6188a3f0a1691f1a187c.tar.bz2 dn42peering-2dbbabd1eaee288c7ffc6188a3f0a1691f1a187c.zip |
refactor(central): abstract database pool
This enables the project to easily switch to other pools or centrally change pool options without modifying each service or individual classes.
7 files changed, 52 insertions, 32 deletions
diff --git a/central/src/main/java/moe/yuuta/dn42peering/asn/ASNServiceImpl.java b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNServiceImpl.java index 8b360ce..20cf3ce 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/asn/ASNServiceImpl.java +++ b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNServiceImpl.java @@ -6,7 +6,6 @@ import io.vertx.core.Handler; import io.vertx.core.Vertx; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.mysqlclient.MySQLPool; import io.vertx.sqlclient.*; import io.vertx.sqlclient.templates.SqlTemplate; import moe.yuuta.dn42peering.utils.PasswordAuthentication; @@ -24,9 +23,9 @@ class ASNServiceImpl implements IASNService { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private final Vertx vertx; - private final MySQLPool pool; + private final Pool pool; - ASNServiceImpl(@Nonnull Vertx vertx, @Nonnull MySQLPool pool) { + ASNServiceImpl(@Nonnull Vertx vertx, @Nonnull Pool pool) { this.vertx = vertx; this.pool = pool; } diff --git a/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java index aef9e1c..9e11d8e 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java +++ b/central/src/main/java/moe/yuuta/dn42peering/asn/ASNVerticle.java @@ -8,22 +8,19 @@ import io.vertx.core.eventbus.MessageConsumer; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.json.JsonObject; -import io.vertx.mysqlclient.MySQLConnectOptions; -import io.vertx.mysqlclient.MySQLPool; import io.vertx.serviceproxy.ServiceBinder; -import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.Pool; +import moe.yuuta.dn42peering.database.DatabaseUtils; public class ASNVerticle extends AbstractVerticle { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private MessageConsumer<JsonObject> consumer; - private MySQLPool pool; + private Pool pool; @Override public void start(Promise<Void> startPromise) throws Exception { - final JsonObject json = vertx.getOrCreateContext().config().getJsonObject("database"); - final MySQLConnectOptions opt = new MySQLConnectOptions(json); - pool = MySQLPool.pool(vertx, opt, new PoolOptions().setMaxSize(5)); + pool = DatabaseUtils.getPool(vertx); consumer = new ServiceBinder(vertx) .setAddress(IASNService.ADDRESS) diff --git a/central/src/main/java/moe/yuuta/dn42peering/database/DatabaseUtils.java b/central/src/main/java/moe/yuuta/dn42peering/database/DatabaseUtils.java new file mode 100644 index 0000000..8219f50 --- /dev/null +++ b/central/src/main/java/moe/yuuta/dn42peering/database/DatabaseUtils.java @@ -0,0 +1,27 @@ +package moe.yuuta.dn42peering.database; + +import io.vertx.core.Vertx; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; +import io.vertx.core.json.JsonObject; +import io.vertx.mysqlclient.MySQLConnectOptions; +import io.vertx.mysqlclient.MySQLPool; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.PropertyKind; + +import javax.annotation.Nonnull; + +public final class DatabaseUtils { + public static PropertyKind<Long> LAST_INSERTED_ID = PropertyKind.create("last-inserted-id", Long.class); + + private static final Logger logger = + LoggerFactory.getLogger(DatabaseUtils.class.getSimpleName()); + + @Nonnull + public static Pool getPool(@Nonnull Vertx vertx) { + final JsonObject json = vertx.getOrCreateContext().config().getJsonObject("database"); + final MySQLConnectOptions opt = new MySQLConnectOptions(json); + return MySQLPool.pool(vertx, opt, new PoolOptions().setMaxSize(5)); + } +} diff --git a/central/src/main/java/moe/yuuta/dn42peering/node/NodeServiceImpl.java b/central/src/main/java/moe/yuuta/dn42peering/node/NodeServiceImpl.java index cdcabf3..a2535d4 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/node/NodeServiceImpl.java +++ b/central/src/main/java/moe/yuuta/dn42peering/node/NodeServiceImpl.java @@ -4,8 +4,10 @@ import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; -import io.vertx.mysqlclient.MySQLPool; +import io.vertx.sqlclient.Pool; +import io.vertx.sqlclient.RowSet; import io.vertx.sqlclient.templates.SqlTemplate; +import moe.yuuta.dn42peering.database.DatabaseUtils; import javax.annotation.Nonnull; import java.util.ArrayList; @@ -13,10 +15,10 @@ import java.util.Collections; import java.util.List; class NodeServiceImpl implements INodeService { - private final MySQLPool pool; + private final Pool pool; private final Vertx vertx; - NodeServiceImpl(@Nonnull Vertx vertx, @Nonnull MySQLPool mySQLPool) { + NodeServiceImpl(@Nonnull Vertx vertx, @Nonnull Pool mySQLPool) { this.vertx = vertx; this.pool = mySQLPool; } diff --git a/central/src/main/java/moe/yuuta/dn42peering/node/NodeVerticle.java b/central/src/main/java/moe/yuuta/dn42peering/node/NodeVerticle.java index d23d6d5..cb43932 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/node/NodeVerticle.java +++ b/central/src/main/java/moe/yuuta/dn42peering/node/NodeVerticle.java @@ -8,22 +8,19 @@ import io.vertx.core.eventbus.MessageConsumer; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.json.JsonObject; -import io.vertx.mysqlclient.MySQLConnectOptions; -import io.vertx.mysqlclient.MySQLPool; import io.vertx.serviceproxy.ServiceBinder; -import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.Pool; +import moe.yuuta.dn42peering.database.DatabaseUtils; public class NodeVerticle extends AbstractVerticle { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private MessageConsumer<JsonObject> consumer; - private MySQLPool pool; + private Pool pool; @Override public void start(Promise<Void> startPromise) throws Exception { - final JsonObject json = vertx.getOrCreateContext().config().getJsonObject("database"); - final MySQLConnectOptions opt = new MySQLConnectOptions(json); - pool = MySQLPool.pool(vertx, opt, new PoolOptions().setMaxSize(5)); + pool = DatabaseUtils.getPool(vertx); consumer = new ServiceBinder(vertx) .setAddress(INodeService.ADDRESS) diff --git a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java index 62223c2..5784da2 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java +++ b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java @@ -3,12 +3,12 @@ package moe.yuuta.dn42peering.peer; import io.vertx.core.*; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; -import io.vertx.mysqlclient.MySQLClient; +import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.RowSet; -import io.vertx.sqlclient.SqlClient; import io.vertx.sqlclient.SqlResult; import io.vertx.sqlclient.templates.SqlTemplate; +import moe.yuuta.dn42peering.database.DatabaseUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -18,9 +18,9 @@ class PeerServiceImpl implements IPeerService { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private final Vertx vertx; - private final SqlClient pool; + private final Pool pool; - PeerServiceImpl(@Nonnull Vertx vertx, @Nonnull SqlClient sql) { + PeerServiceImpl(@Nonnull Vertx vertx, @Nonnull Pool sql) { this.vertx = vertx; this.pool = sql; } @@ -41,6 +41,7 @@ class PeerServiceImpl implements IPeerService { for (Peer peer : peers) peerList.add(peer); return Future.succeededFuture(peerList); }) + .onFailure(err -> err.printStackTrace()) .onComplete(handler); return this; } @@ -97,7 +98,7 @@ class PeerServiceImpl implements IPeerService { .mapFrom(PeerParametersMapper.INSTANCE) .mapTo(PeerRowMapper.INSTANCE) .execute(peer, f)) - .compose(rows -> Future.succeededFuture(rows.property(MySQLClient.LAST_INSERTED_ID))) + .compose(rows -> Future.succeededFuture(rows.property(DatabaseUtils.LAST_INSERTED_ID))) .onComplete(handler); return this; } diff --git a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerVerticle.java b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerVerticle.java index 666ced8..59c3f68 100644 --- a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerVerticle.java +++ b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerVerticle.java @@ -8,22 +8,19 @@ import io.vertx.core.eventbus.MessageConsumer; import io.vertx.core.impl.logging.Logger; import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.core.json.JsonObject; -import io.vertx.mysqlclient.MySQLConnectOptions; -import io.vertx.mysqlclient.MySQLPool; import io.vertx.serviceproxy.ServiceBinder; -import io.vertx.sqlclient.PoolOptions; +import io.vertx.sqlclient.Pool; +import moe.yuuta.dn42peering.database.DatabaseUtils; public class PeerVerticle extends AbstractVerticle { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private MessageConsumer<JsonObject> consumer; - private MySQLPool pool; + private Pool pool; @Override public void start(Promise<Void> startPromise) throws Exception { - final JsonObject json = vertx.getOrCreateContext().config().getJsonObject("database"); - final MySQLConnectOptions opt = new MySQLConnectOptions(json); - pool = MySQLPool.pool(vertx, opt, new PoolOptions().setMaxSize(5)); + pool = DatabaseUtils.getPool(vertx); consumer = new ServiceBinder(vertx) .setAddress(IPeerService.ADDRESS) |