2016-07-29 125 views
0

对于这个问题,我发现很多给定的答案,但不幸的是没有为我工作。这就是为什么我发布这个问题。您的帮助将不胜感激。无法为连接URL'null'创建类''的JDBC驱动程序:Tomcat + MySQL + Spring MVC

我在Tomcat中Server.xmlapache-tomcat-7.0.69\conf下如下:

<Resource name="jdbc/spring_hibernateDB" 
    global="jdbc/spring_hibernateDB" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/spring_hibernate" 
    username="test" 
    password="password" 
    maxActive="100" 
    maxIdle="20" 
    minIdle="5" 
    maxWait="10000" 
    /> 

context.xmlapache-tomcat-7.0.69\conf如下:

<ResourceLink name="jdbc/mySpring_hibernateDB" 
    global="jdbc/spring_hibernateDB" 
    auth="Container" 
    type="javax.sql.DataSource"/> 

web.xml如下:

<resource-ref> 
    <res-ref-name>jdbc/mySpring_hibernateDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

Spring-servlet.xml如下:

<bean id="jndiDSource" class="org.springframework.jndi.JndiObjectFactoryBean" autowire="byName"> 
    <property name="jndiName" value="java:comp/env/jdbc/mySpring_hibernateDB" /> 
</bean> 

<bean id="mysessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" p:dataSource-ref="jndiDSource" p:mappingResources="employee.hbm.xml"> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
</bean> 

而且我已经包含在机器人mysql的罐子在tomcat/lib和月食webapp/lib forlder。当我运行该应用程序时,我收到下面的错误。

HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create JDBC driver of class '' for connect URL 'null'; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

-------------------------------------------------------------------------------- 

type Exception report 

message Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create JDBC driver of class '' for connect URL 'null'; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create JDBC driver of class '' for connect URL 'null'; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


root cause 

org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create JDBC driver of class '' for connect URL 'null'; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83) 
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424) 
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410) 
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:412) 
    org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:375) 
    org.springframework.orm.hibernate3.HibernateTemplate.loadAll(HibernateTemplate.java:585) 
    com.abdul.dao.EmployeeDAOImpl.fetchAll(EmployeeDAOImpl.java:38) 
    com.abdul.service.EmployeeService.fetchAllEmps(EmployeeService.java:27) 
    com.abdul.controller.EmployeeController.displayAllEmps(EmployeeController.java:54) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    java.lang.reflect.Method.invoke(Unknown Source) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


root cause 

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:83) 
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573) 
    org.hibernate.loader.Loader.doQuery(Loader.java:696) 
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
    org.hibernate.loader.Loader.doList(Loader.java:2228) 
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) 
    org.hibernate.loader.Loader.list(Loader.java:2120) 
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) 
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596) 
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) 
    org.springframework.orm.hibernate3.HibernateTemplate$5.doInHibernate(HibernateTemplate.java:591) 
    org.springframework.orm.hibernate3.HibernateTemplate$5.doInHibernate(HibernateTemplate.java:585) 
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:407) 
    org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:375) 
    org.springframework.orm.hibernate3.HibernateTemplate.loadAll(HibernateTemplate.java:585) 
    com.abdul.dao.EmployeeDAOImpl.fetchAll(EmployeeDAOImpl.java:38) 
    com.abdul.service.EmployeeService.fetchAllEmps(EmployeeService.java:27) 
    com.abdul.controller.EmployeeController.displayAllEmps(EmployeeController.java:54) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    java.lang.reflect.Method.invoke(Unknown Source) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


root cause 

java.lang.NullPointerException 
    sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source) 
    sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source) 
    sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source) 
    java.sql.DriverManager.getDriver(Unknown Source) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:83) 
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1573) 
    org.hibernate.loader.Loader.doQuery(Loader.java:696) 

请帮忙。提前致谢。

回答

0

这是抱怨,因为没有为JndiDS

你需要有像JndiDs定义的驱动程序或URL:

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <!-- Define MySQL DB Driver name and URL --> 
    <property name="url" value="jdbc:mysql://localhost:3306/spring_hibernate" /> 
    <property name="username" value="..." /> 
    <property name="password" value="..." /> 
    <property name="initialSize" value="5" /> 
    <property name="maxActive" value="10" /> 
    <property name="maxIdle" value="5" /> 
    <property name="minIdle" value="2" /> 
</bean> 

<bean class="org.springframework.jdbc.core.JdbcTemplate"> 
    <constructor-arg ref="dataSource" /> 
</bean> 

检查这个例子http://blog.zenika.com/2013/01/30/using-tomcat-jdbc-connection-pool-in-a-standalone-environment/

您只能使用JNDI名称,但必须更新休眠属性

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.connection.datasource">java:comp/env/jdbc/spring_hibernateDB</property> 
     <property name="hibernate.current_session_context_class">thread</property> 

    </session-factory> 
</hibernate-configuration> 

检查http://www.journaldev.com/2905/hibernate-tomcat-jndi-datasource-example-tutorial

+0

非常感谢您的回复。在我们的场景中,DB Credentials不能与开发团队共享。我们只能使用在服务器上定义的jndi名称。我只有jndi的名字。你可以请建议任何只使用jndi名称的解决方案。在你的代码中,我们必须知道db的用户名和密码。 – Abdul

+0

即使我使用任何其他应用程序服务器,如Glassfish或JBoss,那么是否需要创建这样的数据源?我的意思是我应该指定用户名和密码? – Abdul

+0

检查更新。你在Tomcat上创建一个'资源',并用Hibernate引用它,并在Spring中用它作为DS。 DS可以单独由JNDI名称引用 –

相关问题