使用Groovy的NiFi ExecuteScript:java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDriver

时间:2016-07-16 14:21:24

标签: groovy classpath apache-nifi

我正在尝试执行使用Microsoft SQL Server JDBC驱动程序的Groovy脚本。我试图在modules目录中指定sql jdbc jar的路径。但是,我的groovy脚本抱怨找不到SQLServerDriver类。

这就是配置的样子 - enter image description here

这是我得到的错误

<auditElement><field id="2881159" type="5" name="Responsiveness" formatstring=""><unSetChoice>2881167</unSetChoice><setChoice>2881166</setChoice></field></auditElement>

当我在我的groovy脚本中打印我的java类路径时,我也没有在类路径中看到添加的模块。

Caused by: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at groovy.sql.Sql.loadDriver(Sql.java:705)
    at groovy.sql.Sql.newInstance(Sql.java:445)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrap.invoke(StaticMetaMethodSite.java:133)
    at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:91)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
    at Script1.run(Script1.groovy:23)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:352)

The added URL shows up in the classloader.

1 个答案:

答案 0 :(得分:0)

模块不会出现在你的java.class.path中,而是被添加到类加载器中。如果您使用的是DriverManager而不是直接通过Class.forName()。newInstance()获取驱动程序类的实例,则JAR只需要在系统类加载器(例如lib /文件夹)中。

也许在你的道路上尝试斜线,如果这不起作用,实验可能是尝试相对路径。如果可行,则处理器中存在Windows路径错误。

最后,您可以使用驱动程序JAR和设置设置DBCPConnectionPool控制器服务,然后使用我在博客中概述的技术从您的脚本访问它:http://funnifi.blogspot.com/2016/04/sql-in-nifi-with-executescript.html。这样,控制器服务可由其他处理器重新使用(如果需要),并且可以在设置驱动程序,连接等方面进行所有猜测。