为 jdbc 数据直接 sqlserver 驱动程序覆盖 org.apache.solr.handler.dataimport.JdbcDataSource
Posted
技术标签:
【中文标题】为 jdbc 数据直接 sqlserver 驱动程序覆盖 org.apache.solr.handler.dataimport.JdbcDataSource【英文标题】:Override org.apache.solr.handler.dataimport.JdbcDataSource for jdbc data direct sqlserver driver 【发布时间】:2020-04-10 07:38:22 【问题描述】:我需要重写 JdbcDataSource 类的 getConnection() 方法来解锁 Data direct 驱动程序。
当 solr 正在执行 solr 核心内的 solr-data-config.xml 中存在的 sql 查询时,它无法执行 sql 查询。 它失败并出现错误“此驱动程序已锁定以用于嵌入式应用程序”。
我可以覆盖 getConnection() 方法并通过扩展 JdbcDataSource 类来解锁驱动程序。 但是 solr 并没有参加我的扩展课程。如何使用扩展的 JdbcDataSource 配置 solr。
【问题讨论】:
我认为最简单的方法是创建一个扩展旧类的新类,覆盖getConnection()
调用,将类包含在 .jar 文件中,将 .jar 文件添加到Solr 加载的库,然后在数据源定义中使用新名称 - dataSource type="NewAndImprovedJdbcDataSource"
。如果它不允许覆盖 getConnection,您可能必须将内容复制到一个新文件并创建一个“新”的、单独的数据源。
我重写了 getConnection 方法。我在哪里可以添加 feild 数据源类型 =“NewAndImprovedJdbcDataSource”?我在哪里可以将 jar 放在 solr 安装目录中?我不确定我可以在哪个位置添加我的 jar 文件。
您将 .jar 文件添加到 solrconfig.xml
中的 lib
元素中:lucene.apache.org/solr/guide/6_6/… - 您在 data-config.xml 文件中引用数据源:lucene.apache.org/solr/guide/6_6/…
感谢分享配置步骤。我按照步骤操作。但是,在我编写了一个扩展 JdbcDataSource 的自定义数据源之后,在运行 solr 之后,我遇到了这个错误。 java.lang.NoClassDefFoundError: org/apache/solr/handler/dataimport/JdbcDataSource
如果你扩展它,你仍然需要为 JdbcDataSource 加载库。 Solr 日志将显示所有正在加载的 jar。
【参考方案1】:
我认为最简单的方法是创建一个扩展旧类的新类,覆盖 getConnection()
调用,将类包含在 .jar 文件中,将 .jar 文件添加到 Solr 正在加载的库中,然后在数据源定义中使用新名称 - dataSource type="NewAndImprovedJdbcDataSource"
。
你必须把.jar文件放到lib elements in solrconfig.xml
:
<lib dir="../../../<path>/" regex="my-library\.jar" />
然后您在 data-config.xml 文件中引用数据源:
<dataSource name="<name>" type="YourCustomClass" />
【讨论】:
以上是关于为 jdbc 数据直接 sqlserver 驱动程序覆盖 org.apache.solr.handler.dataimport.JdbcDataSource的主要内容,如果未能解决你的问题,请参考以下文章
[XXX] 注册了JDBC驱动程 序 [oracle.jdbc.OracleDriver]
将 SQLserver jdbc 驱动程序连接到 Dataproc 集群