Class HikariModule

  • All Implemented Interfaces:
    com.google.inject.Module

    public class HikariModule
    extends ConfigurableModule<com.zaxxer.hikari.HikariConfig>
    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.core.service.Service;
     import ratpack.core.service.StartEvent;
     import ratpack.exec.Blocking;
     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;
    
     import static org.junit.jupiter.api.Assertions.*;
    
     public class Example {
       static class InitDb implements Service {
         public void onStart(StartEvent startEvent) throws Exception {
           DataSource dataSource = startEvent.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));");
           }
         }
       }
    
       public static void main(String... args) throws Exception {
         EmbeddedApp.of(s -> s
           .registry(Guice.registry(b -> b
             .module(HikariModule.class, hikariConfig -> {
               hikariConfig.setDataSourceClassName("org.h2.jdbcx.JdbcDataSource");
               hikariConfig.addDataSourceProperty("URL", "jdbc:h2:mem:dev"); // Use H2 in memory database
             })
             .bind(InitDb.class)
           ))
           .handlers(chain -> chain
             .post("set/:val", ctx ->
                 Blocking.get(() -> {
                   try (Connection connection = ctx.get(DataSource.class).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 ->
                 Blocking.get(() -> {
                   try (Connection connection = ctx.get(DataSource.class).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");
           assertEquals("foo", httpClient.getText("get"));
         });
       }
     }
     
    See Also:
    HikariCP, HikariConfig, ConfigurableModule
    • Constructor Detail

      • HikariModule

        public HikariModule()
    • Method Detail

      • configure

        protected void configure()
        Overrides:
        configure in class com.google.inject.AbstractModule
      • hikariDataSource

        @Provides
        public com.zaxxer.hikari.HikariDataSource hikariDataSource​(com.zaxxer.hikari.HikariConfig config)
      • hikariPool

        @Provides
        public com.zaxxer.hikari.pool.HikariPool hikariPool​(com.zaxxer.hikari.HikariDataSource hikariDataSource)
      • hikariService

        @Provides
        public HikariService hikariService​(com.zaxxer.hikari.HikariDataSource hikariDataSource)