2013-07-28 152 views
5

我想用Spring和Hibernate以及MySQL數據庫來配置Java MVC webapp,但是當我運行服務器時我有這個錯誤,我不知道有什麼問題。錯誤:org.hibernate.util.JDBCExceptionReporter - 無法加載JDBC驅動程序類'com.mysql.jdbcDriver'

WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: null 
ERROR: org.hibernate.util.JDBCExceptionReporter - Cannot load JDBC driver class 'com.mysql.jdbcDriver' 
WARN : org.hibernate.cfg.SettingsFactory - Could not obtain connection to query metadata 
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbcDriver' 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136) 
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) 
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:114) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbcDriver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130) 
    ... 33 more 
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    ... 22 more 
jul 28, 2013 12:26:19 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available 
    at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138) 
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2163) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2159) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1383) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    ... 22 more 

我不知道哪裏可能是錯誤。這是我的applicationContext.xml。該錯誤似乎在dataSource bean中。

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


    <!-- holding properties for database connectivity /--> 
    <context:property-placeholder location="classpath:jdbc.properties"/> 

    <!-- enabling annotation driven configuration /--> 
    <context:annotation-config/> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <!-- Scans the classpath of this application for @Components to deploy as beans --> 
    <context:component-scan base-package="com.companyname.springapp.repository" /> 
    <context:component-scan base-package="com.companyname.springapp.service" /> 

</beans> 

這是我jdbc.properties

hibernate.generate_statistics = true 
hibernate.show_sql = true 

jdbc.driverClassName=com.mysql.jdbcDriver 
jdbc.url=jdbc:mysql://localhost:3306/baseDeDatos 
jdbc.username=miUsuario 
jdbc.password=miContrasena 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 

我都這個罐子來加載類。他們中的某些東西(如jpa-api.jar)我認爲這不是必然的,其他人是重複的,但是我從其他項目開始製作它,但我沒有刪除它:

activation-1.1.jar 
antlr-2.7.7.jar 
aopalliance-1.0.jar 
c3p0-0.9.1.jar 
commons-logging-1.1.1.jar 
commons-pool-1.6.jar 
dom4j-1.6.1.jar 
hibernate-commons-annotations-3.2.0.Final.jar 
hibernate-commons-annotations-4.0.1.Final.jar 
hibernate-core-3.5.3-Final.jar 
hibernate-core-4.1.8.Final.jar 
hibernate-entitymanager-4.1.8.Final.jar 
hibernate-jpa-2.0-api-1.0.1.Final.jar 
hibernate-validator-4.0.2.GA.jar 
hibernate3.jar 
javassist-3.15.0-GA.jar 
javax.mail.jar 
jaxb-api-2.1.jar 
jaxb-impl-2.1.3.jar 
jboss-logging-3.1.0.GA.jar 
jboss-transaction-api_1.1_spec-1.0.0.Final.jar 
jpa-api-2.0-cr-1.jar 
jstl-1.2.jar 
junit-4.8.1.jar 
log4j-1.2.14.jar 
mysql-connector-java-5.1.25.jar 
mysql-connector-java-5.1.6.jar 
org.apache.commons.dbcp.jar 
org.springframework.orm.jar 
postgresql-8.4-701.jdbc4.jar 
servlet-api-2.5.jar 
slf4j-api-1.5.11.jar 
slf4j-api-1.6.1.jar 
slf4j-log4j12-1.5.11.jar 
spring-aop-3.0.2.RELEASE.jar 
spring-asm-3.0.2.RELEASE.jar 
spring-beans-3.0.2.RELEASE.jar 
spring-context-3.0.2.RELEASE.jar 
spring-context-support-3.0.2.RELEASE.jar 
spring-core-3.0.2.RELEASE.jar 
spring-expression-3.0.2.RELEASE.jar 
spring-jdbc-3.0.2.RELEASE.jar 
spring-orm-3.0.2.RELEASE.jar 
spring-tx-3.0.2.RELEASE.jar 
spring-web-3.0.2.RELEASE.jar 
spring-webmvc-3.0.2.RELEASE.jar 
stax-api-1.0-2.jar 
validation-api-1.0.0.GA.jar 

有人可以幫助我解決這個問題嗎?我使用Tomcat 7在Eclipse中運行它。

謝謝!

+0

爲什麼你有兩個不同版本的'mysql-connector-java'(和其他各種庫)?多個版本通常是一個壞主意... –

回答

10

你已經得到了錯誤的驅動程序名稱的位置:

jdbc.driverClassName=com.mysql.jdbcDriver 

它應該是:

jdbc.driverClassName=com.mysql.jdbc.Driver 

jdbcDriver之間的.

診斷類似的事情的方式是看類,它找不到:

Cannot load JDBC driver class 'com.mysql.jdbcDriver' 

已經看起來可疑的名稱jdbcDriver不遵循Java的命名約定。那麼在那時你再仔細檢查一下它應該是什麼 - 例如通過查看jar文件並修復配置。

正如評論中指出的那樣,我認爲在類路徑中同一個jar文件的多個版本不是一個好主意 - 儘管我看不到那個結局。

+0

謝謝。什麼愚蠢的錯誤! 同一個jar文件的多個版本是由於我製作了該項目,而我正在更換爲另一個版本/技術...... –

0

我有這個問題,事實證明我的.properties文件在driverClassName值的末尾有一對「\ t \ t」。但是,當錯誤將打印出來,它沒有顯示標籤。當我走過漫長的調試跋涉時,我終於發現了這一點。

所以如果有人在SO上發現了這個問題,並且出現了上述問題,請檢查您的.prop文件,確保值的末尾沒有任何異常。

相關問題