2

我有一个由几个 OSGi 包构建的项目。其中之一是一个通用的数据库包,它定义了一个可以在整个项目中使用的数据源。该服务的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包含内容的文件org.postgresql.Driver

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

4

2 回答 2

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

于 2010-06-03T08:55:55.210 回答
0

“没有合适的司机”与“找不到司机”不是一回事。

这向我表明已加载 JDBC 驱动程序类,但连接 URL 的语法不正确。

于 2010-06-02T10:02:27.267 回答