首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Grapes获取JDBC驱动程序的问题

使用Grapes获取JDBC驱动程序的问题
EN

Stack Overflow用户
提问于 2017-12-21 16:21:54
回答 2查看 1.1K关注 0票数 1

我读过很多关于使用Grapes加载依赖项的类似文章,但是我尝试的每一件事都没有结果。使用:

代码语言:javascript
复制
@Grapes([
    @Grab(group='com.microsoft', module='sqljdbc4', version='3.0')
])

class DatabaseTest {
    static void executeSql() {
        def sql = Sql.newInstance("jdbc:sqlserver://my.server.com:1433;databaseName=SOME_DB;user=USER;password=secret", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
        def rows = sql.rows("select something from some_table")
        println rows.join("\n")
    }
}

我得到:

代码语言:javascript
复制
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://my.server.com:1433;databaseName=SOME_DB;user=USER;password=secret

加载JDBC驱动程序的一个常见解决方案似乎是添加@GrabConfig(systemClassLoader = true),但这只会给我带来可怕的No suitable ClassLoader found for grab错误,这是很奇怪的,因为似乎其他人添加@GrabConfig来解决不合适的类加载程序错误。

我也试过这样做:

代码语言:javascript
复制
static loadGrapes(){
    ClassLoader classLoader = new groovy.lang.GroovyClassLoader()
    Grape.grab(group:'com.microsoft', module:'sqljdbc4', version:'3.0', classLoader:classLoader)
    printClassPath(classLoader)
}

static printClassPath(classLoader) {
    println "$classLoader"
    classLoader.getURLs().each {url->
       println "- ${url.toString()}"
    }
    if (classLoader.parent) {
       printClassPath(classLoader.parent)
    }
}

这给了我:

代码语言:javascript
复制
groovy.lang.GroovyClassLoader@740cae06
- file:/C:/Users/me/.groovy/grapes/com.microsoft/sqljdbc4/jars/sqljdbc4-3.0.jar
groovy.lang.GroovyClassLoader@23282c25
sun.misc.Launcher$AppClassLoader@55f96302
- file:/C:/dev/workspaces/utils/bin/
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/groovy-all-2.4.10.jar
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/bsf-2.4.0.jar
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/ivy-2.4.0.jar
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/servlet-api-2.4.jar
- file:/C:/Users/me/.groovy/greclipse/global_dsld_support/
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/plugin_dsld_support/
sun.misc.Launcher$ExtClassLoader@1787f2a0
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/access-bridge-64.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/cldrdata.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/dnsns.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/jaccess.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/jfxrt.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/localedata.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/nashorn.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunec.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunjce_provider.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunmscapi.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunpkcs11.jar
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/zipfs.jar
Caught: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

但是,在本例中,我可以看到sqljdbc4 JAR位于类路径上。如果有人有洞察力的话,那就太好了,在这一点上,我已经用尽了所有我能想到的代码组合来实现这个目标。

我让它运行的唯一方法是将JAR添加到我的. .groovy/lib目录中,但是我需要在Jenkins中执行它,它可以运行在10个不同的从节点上,所以我真的不想在不同的服务器上手动管理这个JAR。

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 09:13:05

根据我的经验,您需要GrabConfig注释和Class.forName的传统调用。

例如,我是如何在独立的Groovy脚本中加载JDBC驱动程序的:

代码语言:javascript
复制
@GrabConfig(systemClassLoader=true)
@Grab('org.postgresql:postgresql:+')

import groovy.sql.Sql

Class.forName('org.postgresql.Driver')

DB = Sql.newInstance('jdbc:postgresql://127.0.0.1/', 'postgres', 'postgres')
票数 2
EN

Stack Overflow用户

发布于 2017-12-22 11:37:50

如果您没有使用默认的系统类加载器,那么您必须显式加载JDBC驱动程序,然后才能使用它。只有默认类加载器上的JDBC驱动程序才会由DriverManager自动加载。在这种情况下,您将显式地需要使用Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")或甚至Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver", true, classLoader)加载JDBC驱动程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47928917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档