BasicDataSource 未找到 postgresql 或 postgis jdbc 驱动程序

BasicDataSource not finding postgresql or postgis jdbc drivers

我正在尝试将 BasicDataSource 添加到新的 LocalContainerEntityManagerFactoryBean。当我像这样创建新的数据源时:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="jdbc:postgresql://localhost:5432/database" />
    <property name="username" value="XXXXX" />
    <property name="password" value="XXXXX" />
</bean>

并将其添加到entitiyManagerFactory

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>

我遇到的错误是找不到 JDBC 驱动程序:

[org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure] HHH000342: Could not obtain connection to query metadata : Cannot load JDBC driver class 'org.postgresql.Driver'

我正在通过 maven 加载 jar:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.3-1103-jdbc3</version>
</dependency>

并将专家添加到我的类路径中

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

所以我想知道我错过了什么?我可以看到驱动程序可以从 maven 依赖库中获得,但是在启动时它从来没有找到它。任何想法将不胜感激。

可能是 Maven 缓存问题...首先尝试更新到新版本,看看是否能解决问题:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1201-jdbc41</version>
</dependency>

此外,这只是一个独立的应用程序还是您 运行 它在容器中,例如 JBoss 环境?

问题是由 Eclipse 和我这边糟糕的 maven 管理造成的。我手动构建了 war 并注意到 2 个不同的 postgresql jar 被加载到 war,一个来自 Hibernate spatial 的旧版本和一个我通过 maven 加载的新版本(这也可以通过 运行ning 使用 maven 查看树命令)。删除空间版本后,我不得不手动 运行 maven build war 并手动将库添加到 tomcat。我怀疑在某处遗留了一些残留物,正常的项目清理和 Maven 更新无法修复。清除所有残留物后,我就可以在 eclipse 中正常启动项目并找到库。