Solr无法加载MySQL JDBC驱动程序

时间:2014-02-25 05:48:05

标签: java mysql apache jdbc solr

我在Solr 4.6.1上使用Mac。我试图弄清楚如何使用数据导入来加载MySQL的数据。但我最终无法加载JDBC Driver类。这是我做的:

mysql-connector-java-5.1.29-bin.jar置于~/Tools/Solr/example/lib/

1.配置~/Tools/Solr/example/solr/collection1/conf/data-config.xml

<dataConfig>
<dataSource type="JdbcDataSource" 
          driver="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/test" 
          user="root" 
          password="root"/>
<document>
<entity name="SolrTest" 
        query="select * from SolrTest">
   <field column="ID" name="id"/>
   <field column="Name" name="name"/>
   <field column="Class" name="class"/>
   <field column="Score" name="score"/>
</entity>
</document>
</dataConfig>

2.Configure ~/Tools/Solr/example/solr/collection1/conf/solrconfig.xml

< config> < /config>

下添加以下内容
<requestHandler name="/dataimport" 
                class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
    <str name="config">data-config.xml</str>
</lst>
</requestHandler>

<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="../../../contrib/dataimporthandler/lib" regex=".*\.jar" />

3.将以下内容添加到~/Tools/Solr/example/solr/collection1/conf/schema.xml

<field name="id" type="int" indexed="true" stored="true" required="true"/>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="class" type="string" indexed="true" stored="true" />
<field name="score" type="int" indexed="true" stored="true"/>

然后运行

java -jar start.jar

当我去

http://localhost:8983/solr/#/collection1/dataimport//dataimport 

显示

No information available (idle)

当我单击执行按钮时,出现以下错误消息:

  

31537 [Thread-15] ERROR org.apache.solr.handler.dataimport.DataImporter - 完全导入   失败:java.lang.RuntimeException:java.lang.RuntimeException:   org.apache.solr.handler.dataimport.DataImportHandlerException:可以   不加载驱动程序:com.mysql.jdbc.Driver处理文档#1 at   org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270)     在   org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411)     在   org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:476)     在   org.apache.solr.handler.dataimport.DataImporter $ 1.run(DataImporter.java:457)   引起:java.lang.RuntimeException:   org.apache.solr.handler.dataimport.DataImportHandlerException:可以   不加载驱动程序:com.mysql.jdbc.Driver处理文档#1 at   org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:410)     在   org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:323)     在   org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:231)     ... 3更多引起的:   org.apache.solr.handler.dataimport.DataImportHandlerException:可以   不加载驱动程序:com.mysql.jdbc.Driver处理文档#1 at   org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:71)     在   org.apache.solr.handler.dataimport.JdbcDataSource.createConnectionFactory(JdbcDataSource.java:116)     在   org.apache.solr.handler.dataimport.JdbcDataSource.init(JdbcDataSource.java:64)     在   org.apache.solr.handler.dataimport.DataImporter.getDataSourceInstance(DataImporter.java:383)     在   org.apache.solr.handler.dataimport.ContextImpl.getDataSource(ContextImpl.java:99)     在   org.apache.solr.handler.dataimport.SqlEntityProcessor.init(SqlEntityProcessor.java:53)     在   org.apache.solr.handler.dataimport.EntityProcessorWrapper.init(EntityProcessorWrapper.java:74)     在   org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:427)     在   org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:408)     ... 5更多引起:java.lang.ClassNotFoundException:无法执行   加载com.mysql.jdbc.Driver或   org.apache.solr.handler.dataimport.com.mysql.jdbc.Driver at at   org.apache.solr.handler.dataimport.DocBuilder.loadClass(DocBuilder.java:916)     在   org.apache.solr.handler.dataimport.JdbcDataSource.createConnectionFactory(JdbcDataSource.java:114)     ... 12更多引起:org.apache.solr.common.SolrException:错误   加载类'com.mysql.jdbc.Driver'在   org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:470)     在   org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:401)     在   org.apache.solr.handler.dataimport.DocBuilder.loadClass(DocBuilder.java:906)     ... 13更多引起:java.lang.ClassNotFoundException:   com.mysql.jdbc.Driver at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at   java.security.AccessController.doPrivileged(Native Method)at   java.net.URLClassLoader.findClass(URLClassLoader.java:354)at   java.lang.ClassLoader.loadClass(ClassLoader.java:423)at   java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:789)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:356)at   java.lang.Class.forName0(Native Method)at   java.lang.Class.forName(Class.java:264)at   org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:454)     ......还有15个

如何解决这个问题?

2 个答案:

答案 0 :(得分:19)

  1. 在solr安装目录中创建一个文件夹。 (比如solr-4.6.1 / lib
  2. 将mysql-connector-java-5.1.29-bin.jar放在文件夹中。
  3. 编辑solrconfig.xml并放入jar的路径

    <lib dir="../../../lib/" regex="mysql-connector-java-5.1.29-bin.jar" />

  4. 重启Solr。

  5. 另外请检查您的网址。它有//

    http://localhost:8983/solr/#/collection1/dataimport//dataimport 
    

答案 1 :(得分:2)

所以对于那些不幸的灵魂而死在这里。我正在使用最新的Solr Docker映像(8.4),该映像已配置为使solr Unix用户没有创建/删除文件夹的任何权限。由于某种原因,我设法创建了一个lib文件,我将其用作目录。经过一段时间的调试后,我注意到了此错误,并立即更改了

<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/" regex=".*\.jar" />

我的postgresql-42.2.10.jar驱动程序所在的位置。否则,将应用所有其他步骤(编辑solrconfig.xml,添加data-config.xml,添加schema.xml,将posgresql-*.jar复制到容器的/opt/solr-8.4.1/contrib/dataimporthandler)。也许值得一提的是,我使用了Docker的内部网络URL而不是localhost:url="jdbc:postgresql://host.docker.internal:5600/my_postgres_db",但我认为这并不重要。

哦,记得添加文件/进行更改=之后重新启动Solr。