博客信息

修改Solr的源码解决DIH导入数据一个Entity创建一个连接不释放的问题

发布时间:『 2017-01-19 01:27』  博客类别:Solr/ES  阅读(1662) 评论(0)

第一步:使用Jetty的JNDI配置数据源$SOLR_HOME/server/contexts/solr-jetty-context.xml

    <New id="jndidmp" class="org.eclipse.jetty.plus.jndi.Resource">
     <Arg>jdbc/dmp</Arg>
     <Arg>
      <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
         <Set name="driverClass">com.mysql.jdbc.Driver</Set>
         <Set name="jdbcUrl">jdbc:mysql://localhost:3306/dmpreport</Set>
         <Set name="user">root</Set>
         <Set name="password">root</Set>
         <Set name="maxPoolSize">2</Set>
         <Set name="minPoolSize">1</Set>
         <Set name="initialPoolSize">1</Set>
         <Set name="maxIdleTime">60</Set>
      </New>
     </Arg>
    </New>

第二步:在$SOLR_HOME/server/solr-webapp/webapp/WEB-INF/web.xml中注册数据源:

<resource-ref>
    <description>MY DB Connection</description>
    <res-ref-name>jdbc/dmp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

第三步:在DIH的数据源文件($SOLR_HOME/server/solr/dmpreport/conf/db-data-config.xml)中建立DataSource:

<dataSource name="dmpreport" jndiName="jdbc/dmp" type="JdbcDataSource" />

第四步:至此为止,本以为使用了连接池会释放连接,但是仍然不释放,导致后续建索引会卡主,而且不报错,DIH获取不到连接了。。。。真他妈操蛋!

查看Solr的源码发现当获取完一个Entity数据导入完后,不会去关闭connection,然后又去获取connection了。导致connection一直不能释放!

修改源码:org.apache.solr.handler.dataimport.JdbcDataSource.java文件

约180行:将Connection c = null;改成  private static Connection c = null;置为全局变量,放于约72行。

33333.jpg

最操蛋的来了:

44444.jpg

接下就是将class文件覆盖solr-dataimporthandler-5.5.3.jar中class替换lib下的jar包即可!

关键字:   solr     DIH  
评论信息
暂无评论
发表评论
验证码: 
Powered by IMZHANGJIE.CN Copyright © 2015-2025 粤ICP备14056181号