2016-07-16 7 views
0

Я пытаюсь выполнить скрипт Groovy, который использует драйвер JDBC Microsoft SQL Server. Я пытаюсь указать путь к jvbc jar в каталоге модулей. Однако мой серьезный сценарий жалуется, что класс SQLServerDriver не найден.NiFi ExecuteScript с Groovy: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

Это то, что конфигурация выглядит - enter image description here

Это ошибка, я получаю

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) 

Когда я печатаю мой как Java CLASSPATH в моем заводной сценарии я не вижу добавленный модуль в classpath.

println "classPath:" + System.getProperty("java.class.path") 

The added URL shows up in the classloader.

+0

Думайте, что банка должна находиться в папке nifi lib на всех коробках , И nifi, вероятно, потребуется перезагрузка. Jdbi должны быть в системном загрузчике классов –

+0

Спасибо Тим. Это работало. Тем не менее, я хотел знать, работает ли добавление модулей в execuuteProcessor или я делаю что-то не так. –

ответ

0

модуль не будет в вашем java.class.path, вместо этого он будет добавлен в загрузчик классов. JAR должен находиться в системном загрузчике классов (lib/folder, например), если вы используете DriverManager или получаете экземпляр своего класса драйвера напрямую через Class.forName(). NewInstance().

Возможно, попробуйте косые черты в вашем пути, и если это не сработает, эксперимент может состоять в том, чтобы попробовать относительный путь. Если это работает, в процессоре есть ошибка пути Windows.

Наконец, вы можете настроить службу контроллера DBCPConnectionPool с помощью JAR-драйвера и параметров, а затем получить доступ к нему из своего сценария, используя технику, изложенную в моем блоге: http://funnifi.blogspot.com/2016/04/sql-in-nifi-with-executescript.html. Таким образом, служба контроллера может быть повторно использована другими процессорами (если это необходимо), и это требует всех догадок при настройке драйвера, подключения и т. Д.

+0

Спасибо Мэтт. Я фактически отлаживал процессор Nifi execute и проверял, что файл jar был найден и добавлен в путь. См. Отредактированное изображение выше. Я, вероятно, пойду по пути создания общего процессора и использую его в своем скрипте, как вы показали. Просто хотел быстро проверить это, прежде чем я это сделаю. Спасибо за блог, кстати, очень информативно. –