使用通用数据库捆绑时找不到驱动程序

时间:2010-06-02 09:59:08

标签: java spring postgresql osgi springsource-dm-server

我有一个从几个OSGi包中构建的项目。其中一个是通用数据库包,它定义了可以在整个项目中使用的数据源。 Spring服务的Spring bean定义是:

<osgi:service interface="javax.sql.DataSource">
    <bean class="org.postgresql.ds.PGPoolingDataSource">
        <property name="databaseName" value="xxx" />
        <property name="serverName" value="xxx" />
        <property name="user" value="xxx" />
        <property name="password" value="xxx" />
    </bean>
</osgi:service>

现在,当使用此DataSource是一个不同的包时,我们收到错误:

No suitable driver found for jdbc:postgresql://localhost/xxx

我已尝试以下方法将org.postgresql.Driver添加到DriverManager:

  1. 在spring上下文中为该Driver实例化一个空bean,如下所示:
    <bean class="org.postgresql.Driver" />

  2. 在其中一个类中静态实例化驱动程序,如下所示:
    Class.forName("org.postgresql.Driver");

    一个。在将org.postgresql包添加为DynamicImport-Package时也尝试了此操作。

  3. 添加了内容为META-INF\services\java.sql.Driver

  4. 的文件org.postgresql.Driver

    这些解决方案似乎都没有帮助。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,或者至少是一种解决方法。在我的抽象DAO中,我添加了以下内容:

static {
  try {
    DriverManager.registerDriver(new org.postgresql.Driver());
  } catch(SQLException ex) {
    LogFactory.getLogger(AbstractDAO.class).error("Could not load Driver", ex);
  }
}

这似乎有效。有谁知道为什么?它与Class.forName解决方案没有什么不同。

答案 1 :(得分:0)

“没有合适的司机”与“找不到司机”不一样。

这向我建议加载了JDBC驱动程序类,但连接URL的语法不正确。