spring 找不到 JNDI 数据源

Posted

技术标签:

【中文标题】spring 找不到 JNDI 数据源【英文标题】:spring not able to find JNDI data source 【发布时间】:2011-09-17 17:31:18 【问题描述】:

我正在开发一个 Spring Web 应用程序。我在应用程序中使用的 JAR 文件正在使用 JNDI 查找 DataSource。我在我的 tomcat 的 server.xml 中配置了该元素。配置如下,

<GlobalNamingResources>
  <Resource name="jdbc/abcd" 
            auth="Container" 
            type="javax.sql.DataSource" 
            maxActive="70"
            maxWait="10000" 
            username="xxxx" password="yyyy" 
            validationQuery="SELECT 1 from dual"
            driverClassName="oracle.jdbc.driver.OracleDriver" 
            url="jdbc:oracle:thin:@xx.xxx.xx.xx:xxxx:zzzz"
            testOnBorrow="false"
            testOnReturn="false"
            testWhileIdle="true"
            timeBetweenEvictionRunsMillis="120000"
            minEvictableIdleTimeMillis="3600000"
  />
</GlobalNamingResources>

上面配置的资源名称,“jdbc/abcd”与JAR正在寻找的相同, 但它无法找到这个配置的数据源。有谁知道可能是什么原因?

我得到以下异常,

javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

【问题讨论】:

你能提供应用程序上下文,你在哪里查找你的数据源 我没有收到您的问题。实际上是 Web 应用程序开发的新手。您能说出“应用程序上下文”是什么意思吗? Spring 框架定义了一个容器区域,称为“应用程序上下文”。那是例如一个名为“application-context.xml”的 XML 文件,其中包含 Bean 定义。 Spring 文档的This part 将为您提供更多详细信息。 我不认为 Spring 或 Spring 配置是这里的问题。他正在使用一个外部 jar 文件,该文件似乎依赖于名为 jdbc/abcd 的 J2EE 资源。他需要做的是在 J2EE 上下文中为他的应用程序定义这个资源。我不认为 Spring 应用程序上下文是相关的。 不,“jdbc/abcd”是 JNDI 名称的简写。对于 Tomcat,它应该是“java:comp/env/jdbc/adbc”。 【参考方案1】:

您需要在 Web 应用程序上下文中定义一个 ResourceLink,使全局资源对 Web 应用程序可见。

<ResourceLink 
        name="nameThatIsVisibleToTheWebApplication"
        global="theGlobalName"
        ...

【讨论】:

我应该把它放在 web.xml 中吗? @Mariselvam 您也可以将其放入位于 server.xml 所在的 /conf 文件夹中的 context.xml 文件中。【参考方案2】:

您需要做的不仅仅是配置 Spring。

我建议阅读Tomcat JNDI documentation 和this。

【讨论】:

以上是关于spring 找不到 JNDI 数据源的主要内容,如果未能解决你的问题,请参考以下文章

带有纯 JDBC-JNDI:javax.naming.NameNotFoundException 的 Tomcat 8.5:名称 [jdbc/KDB] 未绑定在此上下文中。找不到 [jdbc]

Spring Security 找不到数据源

Spring Security 找不到数据源

Spring Boot JPA 找不到数据源

找不到类型的属性...自定义 Spring 数据存储库

Spring Boot 使用 spring.datasource.data 的时候找不到数据文件