spring NameNotFoundException:名称 jdbc 在此上下文中未绑定
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9350949/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NameNotFoundException: Name jdbc is not bound in this Context
提问by stivlo
I am trying to define a JNDI DB connection in a test project with Spring. I've bootstrapped the project with Spring Roo and thus is Mavenized. Here is the Roo script for reference (Roo 1.2.1)
我正在尝试使用 Spring 在测试项目中定义 JNDI DB 连接。我已经使用 Spring Roo 引导了该项目,因此是 Mavenized。这是供参考的 Roo 脚本(Roo 1.2.1)
project --topLevelPackage org.obliquid.cpool
jpa setup --database MYSQL --provider HIBERNATE --jndiDataSource /jdbc/cpool
web mvc setup
entity jpa --class org.obliquid.cpool.entity.Person
field string --fieldName name
web mvc scaffold --class ~.entity.Person
web mvc all --package ~.web
In src/main/resources/META-INF/spring/applicationContext.xmlI've the following (created by Roo):
在src/main/resources/META-INF/spring/applicationContext.xml我有以下(由 Roo 创建):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
...
<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/cpool" resource-ref="true"/>
...
I've created src/main/resources/META-INF/context.xmlwith the following content:
我创建src/main/resources/META-INF/context.xml了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" docBase="cpool" reloadable="true" debug="1">
<Resource name = "jdbc/cpool"
auth = "Container"
type = "javax.sql.DataSource"
username = "dbusername"
password = "dbpassword"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/dbname?DateTimeBehavior=convertToNull&characterEncoding=UTF-8"
maxActive = "100"
maxIdle = "4"
maxWait = "20000"
removeAbandoned = "true"
removeAbandonedTimeout="600"
logAbandoned="true"/>
</Context>
However, when I try to run the application in Tomcat 7.0, I get the following error:
但是,当我尝试在 Tomcat 7.0 中运行该应用程序时,出现以下错误:
ERROR org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
错误 org.springframework.web.context.ContextLoader - 上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“dataSource”的 bean 时出错:调用 init 方法失败;嵌套异常是 javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
What should I do to properly define the datasource?
我应该怎么做才能正确定义数据源?
回答by JB Nizet
The context.xml file must be in the META-INF directory of the warfile. It must not be in the classes directory or in a jar file.
context.xml 文件必须在war文件的 META-INF 目录中。它不能位于 classes 目录或 jar 文件中。
Put the META-INF directory with the context.xml in the directory containing the root of the webapp in your source folder tree.
将带有 context.xml 的 META-INF 目录放在源文件夹树中包含 web 应用程序根目录的目录中。

