mysql - 名称 [jdbc/springmvc] 未在此上下文中绑定(bind)

标签 mysql spring-mvc

*org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'webConfig': 
Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'getDataSource' defined in com.futor.user.config.WebConfig: 
Bean instantiation via factory method failed; nested exception is 
org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [javax.activation.DataSource]: 
Circular reference involving containing bean 'webConfig' - consider declaring the factory method as static for independence from its containing instance. Factory method 'getDataSource' threw exception; nested exception is javax.naming.NameNotFoundException: 
Name [jdbc/springmvc] is not bound in this Context. Unable to find [jdbc].
    at  org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)
    at  org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
    at  org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1395)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at  org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at  org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:849)
    at  org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
    at  org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
    at  org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400)
    at  org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
    at  org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
    at  org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5155)
    at  org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5680)
    at  org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at  org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1018)
    at  org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994)
    at  org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at  org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
    at  org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021)
    at  java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at  java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at  java.lang.Thread.run(Thread.java:748) 
    Caused by: org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'getDataSource' defined in com.futor.user.config.WebConfig: 
    Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: 
    Failed to instantiate [javax.activation.DataSource]: Circular reference involving containing bean 'webConfig' - consider declaring the factory method as static for independence from its containing instance. Factory method 'getDataSource' threw exception; nested exception is javax.naming.NameNotFoundException: 
    Name [jdbc/springmvc] is not bound in this Context. Unable to find [jdbc].
    at  org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
    at  org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:456)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1305)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1144)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at  org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at  org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at  org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at  org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1247)
    at  org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167)
    at  org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)

WebConfig.java:

@Configuration@EnableWebMvc@ComponentScan(basePackages = {
    "com.futor.user"
})

public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Bean
    public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
        return new NamedParameterJdbcTemplate((javax.sql.DataSource) dataSource);
    }

    @Bean
    public DataSource getDataSource() throws NamingException {
        JndiTemplate jndiTemplate = new JndiTemplate();
        DataSource dataSource = (DataSource) jndiTemplate.lookup("java:comp/env/jdbc/springmvc");
        return dataSource;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry handlerRegistry) {
        handlerRegistry.addResourceHandler("/resources/**").addResourceLocations("/resources");
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/user");
        viewResolver.setSuffix(".jsp");
        return null;
    }   
}

pom.xml:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>
<build>
    <finalName>test</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

WebInitializer.java:

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitiallizer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class < ?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class[] {
            WebConfig.class
        };
    }

    @Override
    protected Class < ?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[] {
            "/"
        };
    }
}

最佳答案

问题的出现是因为 jndi 查找失败导致该 bean 的 Autowiring 失败。试试这个:

DataSource dataSource = (DataSource) jndiTemplate.lookup("jdbc/springmvc");

关于mysql - 名称 [jdbc/springmvc] 未在此上下文中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55351182/

相关文章:

mysql - 如何格式化输出文件(或转储文件)的文件名

Spring MVC + 磁贴 : integration testing

java - Google App Engine - 了解部署模式下的 URL 与本地 - 导致登录问题

java - 获取枚举类型的所有实例的列表并在 View 中迭代

mysql - 无法创建表。愚蠢的问题,简单的查询

***.leave this.*** 的 MySQL 正则表达式模式不起作用

C++ - Mysql 连接器

php - 如何获取用户之间对话的最新消息? (聊天系统)

java - 使用 Spring MVC 获取 JR 报告时出现异常

java - org.apache.catalina.LifecycleException;无法启动组件