2016-07-16 7 views
0

Microsoft SQL Server JDBCドライバを使用しているGroovyスクリプトを実行しようとしています。私はmodulesディレクトリにsql jdbc jarのパスを指定しようとしています。しかし、わかりやすいスクリプトでは、SQLServerDriverクラスが見つからないという不満があります。Groovyを使用したNiFi ExecuteScript:java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDriver

これは、設定は次のようになります - enter image description here

これは私が私が私の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) 

を取得エラーですクラスパスでも。

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

The added URL shows up in the classloader.

+0

jarはすべてのボックスのnifi libフォルダー。そして、nifiはおそらく再起動が必要です。 Jdbi jarはシステムクラスローダーにある必要があります –

+0

Thanks Tim。これはうまくいった。しかし、execuuteProcessorでモジュールを追加するかどうか、あるいは何か間違っているかどうかを知りたかったのです。 –

答えて

0

モジュールではなく、それはクラスローダに追加され、あなたのjava.class.pathになりません。 DriverManagerを使用していてClass.forName()。newInstance()を介してドライバクラスのインスタンスを直接取得するのではなく、JARはシステムクラスローダー(lib/folderなど)にある必要があります。

おそらく、あなたのパスにスラッシュを入れてみてください。それでもうまくいかない場合は、相対パスを試すことができます。それがうまくいくと、プロセッサにWindowsのパスバグがあります。

最後に、ドライバーのJARと設定を使用してDBCPConnectionPoolコントローラーサービスを設定し、私のブログで概説しているテクニック:http://funnifi.blogspot.com/2016/04/sql-in-nifi-with-executescript.htmlを使用してスクリプトからアクセスすることができます。そうすれば、コントローラーサービスは他のプロセッサー(必要な場合)によって再利用可能になり、ドライバー、接続などの設定からすべての推測が外れます。

+0

ありがとうございました。私は実際にNifi実行プロセッサをデバッグし、jarファイルが見つかったことを確認してパスに追加しました。上記の編集画像をご覧ください。おそらく共有プロセッサーを作成し、スクリプトの中でそれを使っているように、私はおそらく経路をたどって行くでしょう。私がそれをする前にすぐにこれをテストしたいと思っていました。途中でブログに感謝 - 非常に有益。 –

関連する問題