2014-01-23 103 views
0

我是新來的春天,在我的應用程序需要連接到MySQL,我所有的數據庫的配置是一個bean,當我設法得到它時,服務器對我這個錯誤:春天找不到我的豆

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined 

這是我的servlet上下文,我定義我的豆:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <context:component-scan base-package="com.metmi.mmasgis" /> 







    <beans:bean id="dataSource" name="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     autowire-candidate="true"> 
     <beans:property name="driverClassName" 
      value="com.mysql.jdbc.Driver"> 
     </beans:property> 
     <beans:property name="username" value="root"></beans:property> 
     <beans:property name="password" value="password"></beans:property> 
     <beans:property name="url" 
      value="jdbc:mysql://localhost:3306/springschema"> 
     </beans:property> 
    </beans:bean> 
</beans:beans> 

這是我的控制器:

package com.metmi.mmasgis; 

import java.text.DateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.Locale; 

import javax.inject.Inject; 
import javax.sql.DataSource; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.context.ContextLoader; 

import com.metmi.mmasgis.dao.DbImpl; 
import com.metmi.mmasgis.model.Db; 

/** 
* Handles requests for the application home page. 
*/ 
@Controller 
public class HomeController { 
    @Inject 
    DbImpl dbs; 
    private static final Logger logger = LoggerFactory 
      .getLogger(HomeController.class); 

    /** 
    * Simply selects the home view to render by returning its name. 
    */ 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Locale locale, Model model) { 
     logger.info("Welcome home! The client locale is {}.", locale); 

     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, 
       DateFormat.LONG, locale); 

     String formattedDate = dateFormat.format(date); 

     model.addAttribute("serverTime", formattedDate); 

     return "home"; 
    } 

    /** 
    * get the database list in Mysql 
    */ 
    @RequestMapping(value = "/db", method = RequestMethod.GET) 
    public String dbs(Locale locale, Model model) { 
     ApplicationContext ctx = ContextLoader 
       .getCurrentWebApplicationContext(); 
     DataSource ds = (DataSource) ctx.getBean("dataSource"); 
     dbs = new DbImpl(); 
     dbs.setDataSource(ds); 
     ArrayList<Db> dbList = dbs.getDatabases(); 
     model.addAttribute("dbList", dbList); 
     return "dbs"; 
    } 

    /** 
    * Simply shows ciao. 
    */ 
    @RequestMapping(value = "/ciao", method = RequestMethod.GET) 
    public String ciao(Locale locale, Model model) { 
     logger.info("Welcome home! The client locale is {}.", locale); 

     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, 
       DateFormat.LONG, locale); 

     String formattedDate = dateFormat.format(date); 

     model.addAttribute("serverTime", formattedDate); 

     return "ciao"; 
    } 

} 
+0

我們需要了解如何啓動程序。我懷疑XML文件可能沒有被讀取。另外,如果你可以自動連接它,你不應該手動查找bean。 – chrylis

+0

我可以在你的xml文件''中看到另外一個問題。發佈完整的堆棧跟蹤.. –

回答

2

移動你將bean聲明添加到您的主應用程序上下文中,而不是您擁有DispatcherServlet的那個。