2013-04-29 7 views
0

첫 번째로 나는 이것이 봄을 처음 시도하는 것입니다.스프링을 사용하여 데이터베이스에 연결하는 동안 오류가 발생했습니다.

package com.lftechnology.spring.jdbctemplate.controller; 

import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import com.lftechnology.spring.jdbctemplate.model.dao.EmployeeDAO; 
import com.lftechnology.spring.jdbctemplate.model.dao.EmployeeDAOImpl; 
import com.lftechnology.spring.jdbctemplate.model.dao.mysql.EmployeeMySql; 
import com.lftechnology.spring.jdbctemplate.model.dto.Employee; 

@WebServlet("/AddEmployee") 
public class AddEmployee extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 


    Employee employee; 


    public AddEmployee() { 
     super(); 

    } 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 

     RequestDispatcher dispatcher=request.getRequestDispatcher("addemployee.jsp"); 
     dispatcher.forward(request, response); 
    } 


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 

     ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); 

     EmployeeDAO employeeDAO= (EmployeeDAO) context.getBean("employeeDAO"); 

     employee=new Employee(); 
     String name=(String) request.getAttribute("name"); 
     String designation=(String) request.getAttribute("designation"); 

     employee.setName(name); 
     employee.setDesignation(designation); 

     employeeDAO.insert(employee); 

     RequestDispatcher dispatcher =request.getRequestDispatcher("success.jsp"); 
     dispatcher.forward(request,response); 

    } 

} 

JDBC 연결을 위해 EmployeeMySql라는 이름의 대응 클래스는

package com.lftechnology.spring.jdbctemplate.model.dao.mysql; 

import java.sql.SQLException; 

import javax.sql.DataSource; 

import org.springframework.jdbc.core.JdbcTemplate; 

import com.lftechnology.spring.jdbctemplate.model.dao.EmployeeDAO; 
import com.lftechnology.spring.jdbctemplate.model.dto.Employee; 

public class EmployeeMySql extends JdbcTemplate implements EmployeeDAO 
{ 

    private DataSource dataSource; 




    public void setDataSource(DataSource dataSource) 
    { 
     System.out.println("Datasource here"+dataSource.toString()); 
     try { 
      System.out.println("Datasource here"+dataSource.getLoginTimeout()); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     this.dataSource = dataSource; 
    } 

    public void insert(Employee employee) 
    { 
     String query_sql; 
     query_sql="INSERT INTO EMPLOYEE (name,designation) VALUES (?,?,?)"; 

     update(query_sql,new Object[]{employee.getName(),employee.getDesignation()}); 
    } 

    @Override 
    public Employee retrieveAllData() { 
     // TODO Auto-generated method stub 
     return null; 
    } 



} 
마찬가지로

내 봄 콩입니다 : 데이터베이스 사용하여 스프링의 JDBC 템플릿에 연결하는 동안 나는

여기 AddEmployee 서블릿에 대한 내 코드의 문제가 구성은 spring.xml

<?xml version="1.0" encoding="UTF-8"?> 



<beans xmlns="http://www.springframework.org/schema/beans" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 

xmlns:tx="http://www.springframework.org/schema/tx" 

xsi:schemaLocation="http://www.springframework.org/schema/beans 

          http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 

          http://www.springframework.org/schema/tx 

          http://www.springframework.org/schema/tx/spring-tx-2.0.xsd 

          http://www.springframework.org/schema/aop 

          http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> 


<bean id="dataSourcee" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/spring" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 

<bean id="employeeDAO" class="com.lftechnology.spring.jdbctemplate.model.dao.mysql.EmployeeMySql"> 
    <property name="dataSource" ref="dataSourcee"/> 
</bean> 
<!-- import resource="Spring-Datasource.xml" /> 
    <import resource="Spring-Customer.xml" /--> 


</beans> 

하우 버전 난 항상 내가이 얻을 all.Error에서 알아낼 질수있는 하나의 오류와 끝까지

HTTP Status 500 - Error creating bean with name 'employeeDAO' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required 

type Exception report 

message Error creating bean with name 'employeeDAO' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeDAO' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) 
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    com.lftechnology.spring.jdbctemplate.controller.AddEmployee.doPost(AddEmployee.java:46) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

root cause 

java.lang.IllegalArgumentException: Property 'dataSource' is required 
    org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSet(JdbcAccessor.java:134) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) 
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    com.lftechnology.spring.jdbctemplate.controller.AddEmployee.doPost(AddEmployee.java:46) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

사람이 오류가 정말 무엇인지 말해 줄 수 있을까요? 도움을 많이 주시면 감사하겠습니다.

+0

'setDataSource' 메소드에서'super.setDataSource'를 호출하십시오. 당신은 자신의'dataSource' 변수를 가지고 있지만, 기본 클래스는 주어진'dataSource' 인스턴스로 초기화를 수행합니다. 그리고 그것은 놓치게됩니다. – devang

+0

작동합니다. 감사합니다. :) – user1234

+0

이 설명을 답으로 변환합니다. – devang

답변

2

setDataSource 메소드에서 super.setDataSource를 호출하십시오. 당신은 자신의 dataSource 변수를 가지고 있지만, 기본 클래스는 또한 주어진 dataSource 인스턴스로 초기화를 수행한다. 그리고 그것은 놓친 것이다.

+0

추가 정보 : setDataSource 속성을 호출하는 대신 코드를 완전히 제거하고 기본 클래스의 생성자를 사용하고 나서 봄에 Property 태그 대신 를 사용하십시오 – fpmoles

관련 문제