Search code examples
solrhikaricpdata-import

can data-import-handler use HikariCP?


I'm using solr4.5.1 in work.

The trouble is that a lot of getConnection occurred, when I execute data-import(full-import). So I thought if HikariCP could be used in data-import, but I haven't found similar problem.

Is it possible? If so please advice.

Solr 4.5.1 with Tomcat

data-config.xml

<dataSource driver="oracle.jdbc.driver.OracleDriver" 
            name="jdbc" 
            url="jdbc:oracle:thin:@address/mydb" 
            user="user" password="pass"/>

Solution

  • Heavily borrowed from David H Nebinger's post: Tomcat and HikariCP.

    Install HikariCP

    To make use of JNDI, you need to declare the JNDI datasource with all its' settings, password and cache options within the JNDI declaration. This has nothing to do with Solr at this point. This is a Tomcat mechanism. How you do this is described in this tutorial that also makes use of HikariCP.

    First is to download the .zip or .tar.gz file from http://brettwooldridge.github.io/HikariCP/. This is actually a source release that you'll need to build yourself.

    Second option is to download the built jar from a source like Maven Central, https://mvnrepository.com/artifact/com.zaxxer/HikariCP

    Once you have the jar, copy to the Tomcat lib/ext directory. Note that Hikari CP does have a dependency on SLF4J, so you'll need to put that jar into lib/ext too.

    Do not forget to place your datasource's JDBC driver in the lib/ext folder.

    Configure the JNDI datasource

    Location of your JNDI datasource <Resource /> definitions depends upon the scope for the connections. You can define them globally by specifying them in Tomcat's conf/server.xml and conf/context.xml, or you can scope them to individual applications by defining them in conf/Catalina/localhost/WebAppContext.xml (where WebAppContext is the web application context for the app, basically the directory name from Tomcat's webapps directory).

    Create the file conf/Catalina/localhost/ROOT.xml if it doesn't already exist. Use the table from https://github.com/brettwooldridge/HikariCP#popular-datasource-class-names to find your data source class name, we'll need it when we define the element.

    <Resource name="jdbc/SolrPool" auth="Container"
        factory="com.zaxxer.hikari.HikariJNDIFactory"
        type="javax.sql.DataSource"
        minimumIdle="5" 
        maximumPoolSize="10"
        connectionTimeout="300000"
        dataSourceClassName="oracle.jdbc.pool.OracleDataSource"
        dataSource.url="jdbc:oracle:thin:@address/mydb"
        dataSource.implicitCachingEnabled="true" 
        dataSource.user="user" 
        dataSource.password="pass" />
    

    Make use of the JNDI datasource in Solr

    After you have followed this tutorial, you will need to use the declared JNDI datasource, this would be like described in the Solr Wiki:

    <dataSource
        jndiName="java:jdbc/SolrPool"
        type="JdbcDataSource"
        user="" password=""/> <!-- leave out user/password here -->