BasicDataSource没有找到postgresql或postgis jdbc驱动程序

时间:2015-03-04 20:51:11

标签: java spring postgresql maven postgis

我试图将BasicDataSource添加到新的LocalContainerEntityManagerFactoryBean。当我像这样创建新的dataSource时:

<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>

和mavens添加到我的类路径

<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依赖库中获得,但它在启动时从未找到它。任何想法都会非常感激。

2 个答案:

答案 0 :(得分:1)

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

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

这也只是一个独立的应用程序,或者你是在一个容器中运行它,例如JBoss环境?

答案 1 :(得分:0)

这个问题是由Eclipse和糟糕的maven管理创建的。我手动构建了战争并注意到2个不同的postgresql jar被加载到战争中,Hibernate空间的旧版本和我通过maven加载的更新版本(这也可以通过使用maven运行view tree命令来查看)。删除空间版本后,我不得不手动运行maven build war并手动将库添加到tomcat。我怀疑是否有一些残留物留在某处,正常的项目清洁和maven更新没有修复。一旦清除了所有残留物,我就可以在日食中启动项目,并找到了库。