Каковы преимущества использования библиотеки доступа к данным vert.x для подключения к базе данных (например, Reactive PostgreSQL клиент ) по сравнению с CompletableFuture.supplyAsyn c с JDB C с точки зрения управления потоками .
Предположим, у нас есть веб-приложение. В обоих случаях поток запроса не будет заблокирован во время ожидания базы данных, так почему бы кому-то использовать драйвер vert.x вместо официального jdb c?
Например, в JDB C:
String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user","fred");
props.setProperty("password","secret");
props.setProperty("ssl","true");
CompletableFuture.supplyAsync(() -> {
Connection conn = DriverManager.getConnection(url, props);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500");
while (rs.next())
{
System.out.print("Column 1 returned ");
System.out.println(rs.getString(1));
}
rs.close();
st.close();
});
In ver.x
PgConnectOptions connectOptions = new PgConnectOptions()
.setPort(5432)
.setHost("the-host")
.setDatabase("the-db")
.setUser("user")
.setPassword("secret");
// Pool options
PoolOptions poolOptions = new PoolOptions()
.setMaxSize(5);
// Create the client pool
PgPool client = PgPool.pool(connectOptions, poolOptions);
// A simple query
client.query("SELECT * FROM users WHERE id='julien'", ar -> {
if (ar.succeeded()) {
RowSet<Row> result = ar.result();
System.out.println("Got " + result.size() + " rows ");
} else {
System.out.println("Failure: " + ar.cause().getMessage());
}
// Now close the pool
client.close();
});