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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 04:56:53  来源:igfitidea点击:

NameNotFoundException: Name jdbc is not bound in this Context

springjnditomcat7

提问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&amp;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 应用程序根目录的目录中。