【问题标题】:Why I am not able to use JNDI DataSource in Tomcat 8?为什么我不能在 Tomcat 8 中使用 JNDI 数据源?
【发布时间】:2017-03-06 08:59:49
【问题描述】:

我遇到一种情况,已经两天多了,但是无法使用 JNDI 获取数据库连接。

我收到以下错误

org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance Name = myDatabase 忽略未知属性:“描述”属性的“My DataSource new”值

我正在使用Tomcat-8Java-1.8Spring-3Maven 3.2.5

我正在尝试在 Tomcat 中部署我的网络应用程序。我已经创建了战争并放置在 TOMCAT/webapp 目录中。

数据库的Tomcat/conf/server.xml文件配置

server.xml

<GlobalNamingResources>

<Resource name="jdbc/myDatabase"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              driverClassName="oracle.jdbc.OracleDriver"
             url="jdbc:oracle:thin:@IpAddress:orcl"
              username="tomcat_dbrds"
              password="cmxinfa"
              initialSize="1"
              minIdle="1"
              maxIdle="1"
              maxActive="3"
              maxWait="1000"
              validationQuery="select 1 from dual"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=1500)"
            />
  </GlobalNamingResources>

Spring 应用上下文内容

<jee:jndi-lookup id="monitoringDataSource" jndi-name="jdbc/myDatabase" expected-type="javax.sql.DataSource"/>   

web.xml 内容

  <resource-ref>
    <description>My DataSource new</description>
    <res-ref-name>jdbc/myDatabase</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

我错过了什么?

我已经尝试了所有可能的配置,但没有任何效果。

<Resource name="myDatabase" 
              global="monitords"
              factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
              auth="Container"
              type="javax.sql.DataSource"
              username="tomcat_dbrds"
              password="cmxinfa"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@myipaddress:1521:orcl"
              initialSize="20"
              maxWaitMillis="15000"
              maxTotal="100"
              maxIdle="20"
              defaultAutoCommit="true"
              />


<Resource name="jdbc/myDatabase"
          auth="Container"
          factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
              type="javax.sql.DataSource"
              validationQuery="SELECT 1"
              validationInterval="30000"
              timeBetweenEvictionRunsMillis="30000"
              maxActive="20"
              maxIdle="10"
              minIdle="1"
              maxWait="20000"
              initialSize="20"
              removeAbandonedTimeout="60"
          removeAbandoned="true"
              logAbandoned="true"
              minEvictableIdleTimeMillis="30000"
              jmxEnabled="true"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
              username="tomcat_dbrds"
              password="cmxinfa"
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@myipaddress:1521:orcl"/>




<Resource name="jdbc/myDatabase"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              driverClassName="oracle.jdbc.OracleDriver"
             url="jdbc:oracle:thin:@myipaddress:1521:orcl"
              username="tomcat_dbrds"
              password="cmxinfa"
              initialSize="1"
              minIdle="1"
              maxIdle="1"
              maxActive="3"
              maxWait="1000"
              validationQuery="select 1 from dual"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport(threshold=1500)"
            />

更新 1:

我已经从web.xml 中删除了描述标签,但我仍然遇到同样的错误。我刚刚检查了服务器日志,实际错误如下。 如何解决此错误。

java.sql.SQLException: 无法创建类 '' 的 JDBC 驱动程序 连接 URL 'null'

更新 2:

堆栈跟踪

Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:382)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464)
    at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:497)
    at com.globalss.dnb.monitor.dao.ApplicationConfig.<init>(ApplicationConfig.java:24)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 43 more
Caused by: java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    ... 53 more
Caused by: java.lang.NullPointerException
    at oracle.jdbc.driver.OracleDriver.acceptsURL(OracleDriver.java:620)
    at java.sql.DriverManager.getDriver(DriverManager.java:299)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144)
    ... 57 more

【问题讨论】:

  • 确实很奇怪。已经尝试从 web.xml 中删除描述属性?
  • @LittleSanti 我已经从web.xml 中删除了description 属性,但控制台中的错误仍然相同。但在服务器日志中,我看到以下错误java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'/
  • 您确定这是您 server.xml 中声明的唯一 吗?
  • 我看到一个可疑的行:driverClassName 应该是oracle.jdbc.driver.OracleDriver(实际上我不相信这会导致错误)。
  • @LittleSanti 是的,我确定我的 server.xml 中只声明了

标签: tomcat jndi


【解决方案1】:

tomcat_dir\conf\context.xml - 工作。使用 eclipse-tomcat 环境。

【讨论】:

  • 虽然此代码 sn-p 可以解决问题,但 including an explanation 有助于提高您的回复质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

将您的资源定义放在tomcat_dir\conf\context.xml 中的上下文标记之间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2011-02-24
    • 2012-02-15
    • 2011-12-07
    • 2012-11-23
    • 2012-05-10
    相关资源
    最近更新 更多