我试图将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依赖库中获得,但它在启动时从未找到它。任何想法都会非常感激。
答案 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更新没有修复。一旦清除了所有残留物,我就可以在日食中启动项目,并找到了库。