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]