【问题标题】:Tomcat 8 Oracle 11 JNDI Cannot create JDBC driver of class '' for connect URL 'null'Tomcat 8 Oracle 11 JNDI 无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序
【发布时间】:2017-08-23 11:34:00
【问题描述】:

我正在尝试使用 Tomcat 8 服务器和 Oracle 11g 数据库在 STS 中设置 Spring 4 MVC 应用程序,但在设置数据源时遇到问题。

我知道 Spring 设置没有任何问题,因为没有数据源,它可以正常工作。

这是数据源 bean:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/myDB" />
    <property name="resourceRef" value="false" />
</bean>

我的 web.xml 资源参考:

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

我的 Tomcat 的 server.xml 资源:


-->

<Resource name="jdbc/myDB"
          global="jdbc/myDB"
          auth="Container"
          type="javax.sql.DataSource"
          username="xxxxx"
          password="yyyyyy"
          url="jdbc:oracle:thin:@xxx.yyy"
          driverClassName="oracle.jdbc.OracleDriver"
          initialSize="20"
          maxWaitMillis="15000"
          maxTotal="75"
          maxIdle="20"
          maxAge="7200000"
          testOnBorrow="true"
          validationQuery="select 1 from dual"
          />

还有我的 context.xml

  <ResourceLink name="jdbc/myDB"
    global="jdbc/myDB"
    type="javax.sql.DataSource"/>

我得到的错误是:

错误:无法获得 JDBC 连接 java.sql.SQLException:无法 为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2167) 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2037) 在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543) 在 org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 在 org.hibernate.internal.SessionFactoryImpl$1.obtainConnection(SessionFactoryImpl.java:419) 在 org.hibernate.hql.spi.id.IdTableHelper.executeIdTableCreationStatements(IdTableHelper.java:67) 在 org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:125) 在 org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:42) 在 org.hibernate.hql.spi.id.AbstractMultiTableBulkIdStrategyImpl.prepare(AbstractMultiTableBulkIdStrategyImpl.java:88) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:302) 在 org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726) 在 org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:511) 在 org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:495) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 在 org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) 在 org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) 在 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) 在 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138) 在 javax.servlet.GenericServlet.init(GenericServlet.java:158) 在 org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) 在 org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) 在 org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989) 在 org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4940) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5250) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 在 java.util.concurrent.FutureTask.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 引起:java.sql.SQLException: java.sql.DriverManager.getDriver 中没有合适的驱动程序(未知 来源)在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2151) ... 44 更多

我的 Tomcat lib 目录有我需要的 ojdbc jar,我什至将它包含在我的构建脚本中。这可能是什么原因造成的?

【问题讨论】:

    标签: oracle datasource jndi tomcat8 spring-4


    【解决方案1】:

    检查您的连接 URL。此外,始终使用连接 URL 的长格式,您可以在其中传递各种连接描述符。

    示例:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA=(SERVICE_NAME=myorcldbservicename)))

    【讨论】:

      【解决方案2】:

      解决方案简单到令人尴尬的愚蠢。因为我在 Eclipse 中工作,所以 Eclipse 在 Servers 目录中生成并使用它自己的 server.xml 和 context.xml 文档。将数据源放入这些文件后,一切正常

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 2015-12-18
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 2011-07-25
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多