Java Solr 无法加载 MySQL JDBC 驱动程序

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22005680/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 13:01:55  来源:igfitidea点击:

Solr could not load MySQL JDBC Driver

javamysqlapachejdbcsolr

提问by Li'

I am using Solr 4.6.1on Mac. I try to figure out how to use data import to load data from MySQL. But I end up with fail to load JDBC Driver class. Here is what I did:

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

Put mysql-connector-java-5.1.29-bin.jarto ~/Tools/Solr/example/lib/

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

1.Configure ~/Tools/Solr/example/solr/collection1/conf/data-config.xml:

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:

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

add the following under < config> < /config>

在下面添加以下内容 < config> < /config>

<requestHandler name="/dataimport" 
                class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
    <str name="config">data-config.xml</str>
</lst>
</requestHandler>

also

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

3.Add the following to ~/Tools/Solr/example/solr/collection1/conf/schema.xml:

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"/>

Then run

然后运行

java -jar start.jar

When I go to

当我去

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

it shows

表明

No information available (idle)

When I click the execute button, I got the following error message:

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

31537 [Thread-15] ERROR org.apache.solr.handler.dataimport.DataImporter – Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Could not load driver: com.mysql.jdbc.Driver Processing Document # 1 at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270) at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:411) at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:476) at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:457) Caused by: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Could not load driver: com.mysql.jdbc.Driver Processing Document # 1 at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:410) at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:323) at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:231) ... 3 more Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: Could not load driver: com.mysql.jdbc.Driver Processing Document # 1 at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:71) at org.apache.solr.handler.dataimport.JdbcDataSource.createConnectionFactory(JdbcDataSource.java:116) at org.apache.solr.handler.dataimport.JdbcDataSource.init(JdbcDataSource.java:64) at org.apache.solr.handler.dataimport.DataImporter.getDataSourceInstance(DataImporter.java:383) at org.apache.solr.handler.dataimport.ContextImpl.getDataSource(ContextImpl.java:99) at org.apache.solr.handler.dataimport.SqlEntityProcessor.init(SqlEntityProcessor.java:53) at org.apache.solr.handler.dataimport.EntityProcessorWrapper.init(EntityProcessorWrapper.java:74) at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:427) at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:408) ... 5 more Caused by: java.lang.ClassNotFoundException: Unable to load com.mysql.jdbc.Driver or org.apache.solr.handler.dataimport.com.mysql.jdbc.Driver at org.apache.solr.handler.dataimport.DocBuilder.loadClass(DocBuilder.java:916) at org.apache.solr.handler.dataimport.JdbcDataSource.createConnectionFactory(JdbcDataSource.java:114) ... 12 more Caused by: org.apache.solr.common.SolrException: Error loading class 'com.mysql.jdbc.Driver' at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:470) at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:401) at org.apache.solr.handler.dataimport.DocBuilder.loadClass(DocBuilder.java:906) ... 13 more Caused by: 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 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 more

31537 [Thread-15] 错误 org.apache.solr.handler.dataimport.DataImporter – 完全导入失败:java.lang.RuntimeException:java.lang.RuntimeException:org.apache.solr.handler.dataimport.DataImportHandlerException:无法加载驱动程序:com.mysql.jdbc.Driver Processing Document # 1 at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270) at 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 Processing Document # 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 Processing Document # 1 at org.apache.solr.handler.dataimport.DataImportHandlerException .wrapAndThrow(DataImportHandlerException.java:71) at org.apache.solr.handler.dataimport.JdbcDataSource.createConnectionFactory(JdbcDataSource.java:116) at 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 在 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: Error loading class 'com.mysql.jdbc.Driver' at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:470) at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:401) at 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) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java。 lang.ClassLoader.loadClass(ClassLoader.java:423) at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:789) 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 更多

How to solve this?

如何解决这个问题?

采纳答案by buddy86

  1. Create a folder inside your solr installation directory. (say solr-4.6.1/lib)
  2. Place the mysql-connector-java-5.1.29-bin.jar inside the folder.
  3. Edit solrconfig.xml and put the jar's path

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

  4. Restart Solr.

  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。

Also please check your URL. It's having //

还请检查您的网址。它有//

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

回答by TeemuK

So for those unfortunate souls who end up here. I'm using the latest Solr Docker image (8.4) which is configured so that the solr Unix-user doesn't have any permissions to create/delete folders and whatnot. For some reason I managed to create a libfile which I took for being a directory. After debugging a while I noticed this error, and promptly just changed the

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

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

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

to

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

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

where my postgresql-42.2.10.jardriver is. Otherwise all the other steps apply (edit solrconfig.xml, add data-config.xml, add schema.xml, copy posgresql-*.jarto the container's /opt/solr-8.4.1/contrib/dataimporthandler). Maybe one thing worth of mentioning is that I used Docker's internal network URL instead of localhost: url="jdbc:postgresql://host.docker.internal:5600/my_postgres_db"but I don't think it matters.

我的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"但我认为这并不重要。

And oh, remember to restart Solr after adding the files / making changes =).

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