SQL Server 的自定义处理器 + DBCPConnectionPool:未加载驱动程序 jar

2024-01-11

I have created a controller service to connect to a test db.enter image description here

我有一个自定义处理器,可以从 SQL Server 读取数据,模拟测试、构建和部署到 NiFi 都成功。处理器遇到错误,也许 nar 依赖范围有问题或者......?

我不确定处理器和 nar 项目的 pom 如下:

处理器 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.datalake</groupId>
<artifactId>CDCNiFi</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>nifi-NiFiCDCPoC-processors</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-utils</artifactId>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-dbcp-service-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-processor-utils</artifactId>
</dependency>
<!-- Third-party -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
<!-- Testing & Cross-cutting concerns -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-mock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

纳尔 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.datalake</groupId>
<artifactId>CDCNiFi</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>nifi-NiFiCDCPoC-nar</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>nar</packaging>
<properties>
<maven.javadoc.skip>true</maven.javadoc.skip>
<source.skip>true</source.skip>
</properties>
<dependencies>
<dependency>
<groupId>com.datalake</groupId>
<artifactId>nifi-NiFiCDCPoC-processors</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-standard-services-api-nar</artifactId>
            <type>nar</type>
        </dependency>
        <dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.1.0.jre8</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>

问题 :

SQL Server JDBC jar 可能在运行时未加载,app.log 有以下错误:

2017-03-09 15:04:06,074 ERROR [Timer-Driven Process Thread-1] c.s.d.processors.SQLServerCDCProcessor SQLServerCDCProcessor[id=ad9de403-015a-1000-2b40-7efbfdb049b1] Process or SQL exception in <configure logger template to pick the code location>
2017-03-09 15:04:06,080 ERROR [Timer-Driven Process Thread-1] c.s.d.processors.SQLServerCDCProcessor 
org.apache.nifi.processor.exception.ProcessException: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
at org.apache.nifi.dbcp.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:252) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_71]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_71]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_71]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_71]
at org.apache.nifi.controller.service.StandardControllerServiceProvider$1.invoke(StandardControllerServiceProvider.java:177) ~[na:na]
at com.sun.proxy.$Proxy89.getConnection(Unknown Source) ~[na:na]
at com.datalake.processors.SQLServerCDCProcessor.onTrigger(SQLServerCDCProcessor.java:244) ~[nifi-NiFiCDCPoC-processors-1.0-SNAPSHOT.jar:1.0-SNAPSHOT]
at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) [nifi-api-1.1.1.jar:1.1.1]
at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1099) [nifi-framework-core-1.1.1.jar:1.1.1]
at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136) [nifi-framework-core-1.1.1.jar:1.1.1]
at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) [nifi-framework-core-1.1.1.jar:1.1.1]
at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:132) [nifi-framework-core-1.1.1.jar:1.1.1]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_71]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_71]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_71]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_71]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_71]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_71]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_71]
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429) ~[na:na]
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) ~[na:na]
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[na:na]
at org.apache.nifi.dbcp.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:249) ~[na:na]
... 19 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_71]
at org.apache.nifi.nar.InstanceClassLoader.findClass(InstanceClassLoader.java:117) ~[nifi-nar-utils-1.1.1.jar:1.1.1]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_71]
at org.apache.nifi.nar.InstanceClassLoader.loadClass(InstanceClassLoader.java:98) ~[nifi-nar-utils-1.1.1.jar:1.1.1]
at org.apache.nifi.nar.InstanceClassLoader.loadClass(InstanceClassLoader.java:82) ~[nifi-nar-utils-1.1.1.jar:1.1.1]
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420) ~[na:na]
... 22 common frames omitted
  • 在控制器服务中,我没有看到我的自定义处理器 “引用组件”(它说“无引用组件”)

  • 现在,我已经硬编码了“数据库驱动程序位置”,但是在 生产,我希望控制器从 类路径(不知何故,有可能吗?)

*****编辑-1***** 根据 Mahendra 的建议,我执行了以下操作:

  • 在不对现有 pom.xml 文件进行任何更改的情况下,向两者添加依赖项(sqljdbc4、4.0),构建和部署成功,但 jdbc 驱动程序错误仍然存​​在

  • The 'Database Driver Location(s)' kept as 'file:///'. Same error enter image description here

  • 在 NiFi/lib 中添加了 sqljdbc4.jar,驱动程序错误消失了(出现其他错误,但这些错误将在不同的线程中发生)。Note控制器服务仍然没有将处理器显示为“引用组件”。

  • java版本

    java版本 java版本“1.8.0_121” Java(TM) SE 运行时环境(版本 1.8.0_121-b13) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.121-b13,混合模式)

有没有办法避免在lib中添加sqljdbc4.jar,我的意思是像fasterxml等第三方依赖项表现正常,这是我的配置问题还是sql server maven存储库的问题。 ?


@kaliyug,

EDIT 1:

1.如果你声明的DB类名称是“com.microsoft.sqlserver.jdbc.SQLServerDriver”.您应该在 pom 中添加以下 Maven 依赖项,如下所示。,

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.2</version>
</dependency>
  1. 或者,如果您想在生产环境中使用,您可以在控制器服务中指定驱动程序数据库位置,如下所示。

    file:///C:\DBLocation\sqljdbc42.jar

3.或者直接复制即可“sqljdbc42.jar”直接进入NiFi\Lib复制jar后,您应该重新启动NiFi服务。在运行时,SQL jar在Nifi\Lib目录中搜索DB ClassName时自动加载。

如果您遇到任何问题,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 的自定义处理器 + DBCPConnectionPool:未加载驱动程序 jar 的相关文章

随机推荐

  • 在 codeigniter 中删除后从文件夹中删除图像

    我不仅想删除数据库中的图像 还想删除文件夹中的图像 这是我的模型 public function delete id if this gt db gt delete np gallery id id return true 这是我的控制器
  • 在特定时间在 qglwidget 上绘制一个矩形

    我在 ubuntu 16 04 上使用 Qt 5 7 和 c 我正在尝试实现一个继承 qglwidget 的类 它以给定的速率 3 10 Hz 将图像渲染到屏幕上 除此之外 我想在屏幕上的某处绘制一个小矩形 将其颜色从黑色更改为白色 反之亦
  • 拆分 html 代码标签和内容

    有没有比我对正则表达式了解更多的人知道如何拆分 html 代码 以便将所有标签和所有单词分开 即 p Some content a href www test com A link a p 是这样分开的 array 0 gt p 1 gt
  • Notepad++ Regex + python脚本(替换中添加)

    我也遇到了这个人同样的问题 Notepad 正则表达式将数字相加 https stackoverflow com questions 20506990 notepad regular expression add up numbers 35
  • 获取不带“px;”的样式值的数字后缀

    我正在尝试对 HTML 元素的位置进行一些比较逻辑 我有一个我认为应该可以工作的系统 但是有一个问题 在我的代码中 我使用不等式语句将一个绝对定位元素的当前左侧值和顶部值与另一个 可能正在移动 的元素进行比较 gt and lt 问题是我得
  • 如果我为实体分配一个 ID,那么如何让 NHibernate 保存它,否则生成一个 ID?

    根据 REST 哲学 PUTrequest 应该更新 URL 上的资源 如果存在 如果不存在则创建它 换句话说 如果我使用以下 URL PUT http server item 5 If an ItemID 为 5 的存在 它将被更新 如果
  • 如何在background.js 和popup.js 之间进行通信?

    我有一个带有后台脚本的扩展 background scripts scripts background js 和内容脚本 content scripts matches js scripts content script js 弹出窗口 p
  • 存储谷歌翻译结果

    我的客户正在使用 Google Translate API 将文本从英语翻译成多种语言 如果客户以 Excel 表格的形式向我提供原始文本和翻译文本 我是否可以将翻译文本存储在我的数据库中 我尝试用谷歌搜索这个 发现一个页面说这是不允许的
  • 如何将表格放在div中

    我有一个div包含一个table有两行 如果单词之间有空格 一切都很好 但是如果我放了一个很长的单词 比如400 个字符 在里面 td 表将退出div 我怎样才能打破这个词并将其限制在 div Here https jsfiddle net
  • App Store 提交后出现无效的二进制错误

    I m constantly getting the following Error 将我的应用程序提交到 App Store 后 我已经尝试了 Apple 邮件中推荐的所有内容以及我在 Stackoverflow 上找到的帖子的答案 尽管
  • ISO 8601 定义感恩节的重复间隔?

    我试图定义一个每年重复的时间间隔 从 11 月的第四个星期四的 13 30z 开始 到同一天的 15 00z 结束 这可以使用 ISO 8601 来完成吗 这种重复无法用当前的 ISO 8601 来表达 ISO 8601 的下一版本很可能包
  • 在 jQuery click() 期间处理程序是否总是同步调用?

    通过一些简短的测试看来click 将触发任何适用的处理程序同步地 也就是说 处理程序都在之前调用click 返回 这对于我正在开发的东西来说是理想的 然而 jQuery 文档似乎并没有保证 没有提到一种或另一种方式 处理程序是同步调用的 同
  • 让文本输入框透明?应该很简单吧?

    我试图使我的表单输入透明并将其覆盖在我的 div 之上 基本上我希望文本字段对其后面的任何内容都是透明的 有什么建议么
  • 哪里可以下载 eclipse 4.4 的 google 插件?

    谷歌的一些服务在这里被屏蔽 我无法从更新站点安装谷歌的插件 那么在哪里下载eclipse 4 4的插件存档 目前 谷歌的官方网站只提供4 3的存档 干得好 http dl google com eclipse plugin core 4 4
  • iOS 如何处理 URL 方案重复?

    如果另外 2 个应用程序注册相同的 url 方案 iOS 如何处理这个问题 The iOS 文档 http developer apple com library ios documentation iPhone Conceptual iP
  • 调试测试时使用 DatabaseManager 连接到内存 Hsql(高超音速)数据库

    我想在 IDE Intellij IDEA 11 1 2 中调试测试时使用 hsql DatabaseManager 或 swing 版本 这并不重要 连接到内存中的 HSQL 数据库实例 我已经按照建议尝试过这个答案 https stac
  • 在 C# 中显示带有 alpha 通道的 PNG

    有没有办法在 C 应用程序中正确显示带有 alpha 通道的图像 比如说 PNG 感谢您的任何建议 UPDATE 好吧 我的问题有点不准确 我想获得 Alpha 通道的真正透明度 不填充父级的背景颜色 在下图中我们可以看到支持透明度 但按钮
  • Objective C 类别的实例变量

    我遇到的情况是 我似乎需要将实例变量添加到类别中 但我从 Apple 的文档中知道我不能这样做 所以我想知道最好的替代方案或解决方法是什么 我想要做的是添加一个类别 为 UIViewControllers 添加功能 我会发现它在我所有不同的
  • 在大型分箱数据集上使用“ggplot”时出现内存泄漏

    我正在制作各种ggplot在非常大的数据集上 比示例大得多 我在 x 轴和 y 轴上创建了一个分箱函数 以便能够绘制如此大的数据集 在下面的示例中 memory size 是在开始时记录的 然后将大数据集模拟为dt dt s x2是针对x1
  • SQL Server 的自定义处理器 + DBCPConnectionPool:未加载驱动程序 jar

    I have created a controller service to connect to a test db 我有一个自定义处理器 可以从 SQL Server 读取数据 模拟测试 构建和部署到 NiFi 都成功 处理器遇到错误