An extension module that provides a
DataSource
from a HikariCP JDBC connection pool.
This is a ConfigurableModule
, exposing the HikariConfig
type as the configuration.
All aspects of the connection pool can be configured through this object.
See ConfigurableModule
for usage patterns.
import ratpack.guice.Guice;
import ratpack.hikari.HikariModule;
import ratpack.test.embed.EmbeddedApp;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Example {
public static void main(String... args) {
EmbeddedApp.fromHandlerFactory(launchConfig ->
Guice.builder(launchConfig)
.bindings(b ->
b.add(HikariModule.class, hikariConfig -> {
hikariConfig.setDataSourceClassName("org.h2.jdbcx.JdbcDataSource");
hikariConfig.addDataSourceProperty("URL", "jdbc:h2:mem:dev"); // Use H2 in memory database
})
)
.build(chain -> {
DataSource dataSource = chain.getRegistry().get(DataSource.class);
try (Connection connection = dataSource.getConnection()) {
connection.createStatement().executeUpdate("create table if not exists val(ID INT PRIMARY KEY, val VARCHAR(255));");
}
chain
.post("set/:val", ctx ->
ctx.blocking(() -> {
try (Connection connection = dataSource.getConnection()) {
PreparedStatement statement = connection.prepareStatement("merge into val (id, val) key(id) values (?, ?)");
statement.setInt(1, 1);
statement.setString(2, ctx.getPathTokens().get("val"));
return statement.executeUpdate();
}
}).then(result ->
ctx.render(result.toString())
)
)
.get("get", ctx ->
ctx.blocking(() -> {
try (Connection connection = dataSource.getConnection()) {
PreparedStatement statement = connection.prepareStatement("select val from val where id = ?");
statement.setInt(1, 1);
ResultSet resultSet = statement.executeQuery();
resultSet.next();
return resultSet.getString(1);
}
}).then(ctx::render)
);
})
).test(httpClient -> {
httpClient.post("set/foo");
assert httpClient.getText("get").equals("foo");
});
}
}