2014-03-31 2 views
1

DB 연결에 spring jdbc를 사용하고 있습니다. 테스트 용 Java 클래스 스프링을 실행할 때마다 컨텍스트도로드 될 때마다로드됩니다. 어떠한 제안? 매번 봄 응용 프로그램 컨텍스트가로드되는 이유

내 코드

은 다음과 같습니다

appContext.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:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/beans/spring-context-2.0.xsd "> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/3i" /> 
     <property name="username" value="xxx" /> 
     <property name="password" value="xxx" /> 
    </bean> 

    <bean id="jdbcTemp" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource"> 
     </property> 
    </bean> 
</beans> 

자바 클래스 :

package com.pinovus.dbconnection; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.jdbc.core.JdbcTemplate; 

public class DbDao { 

    private static JdbcTemplate jdbctemplate; 
    private static ApplicationContext appcontext; 

    public JdbcTemplate getJdbctemplate() { 

     ApplicationContext cx = new ClassPathXmlApplicationContext(
       "appContext.xml"); 
     jdbctemplate = (JdbcTemplate) cx.getBean("jdbcTemp"); 
     return jdbctemplate; 
    } 

    public void setJdbctemplate(JdbcTemplate jdbctemplate) { 
     this.jdbctemplate = jdbctemplate; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    } 

} 

그리고 테스트 자바 클래스는 다음과 같습니다

package com.pinovus.dbconnection; 

import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.support.rowset.SqlRowSet; 

public class test { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JdbcTemplate jt = new DbDao().getJdbctemplate(); 
     String qry = "select role from accounts"; 
     SqlRowSet rs = jt.queryForRowSet(qry); 
     while (rs.next()) { 
      System.out.println(rs.getString(1)); 
     } 
    } 
} 
+0

매번 스프링 컨텍스트를로드하는 getJdbctemplate()을 호출하고 있습니다. 무엇을하고 싶니? – jervine10

+0

이제 내 코드 문제를 이해합니다. getJdbctemplate() 메서드를 호출 할 때마다 응용 프로그램 컨텍스트를로드 할 때이를 수행 할 수 있습니까? – jasim

답변

1

의심 있습니다 더 많은 정보를 제공해 주시기 바랍니다. 당신은 예를 들어 the Spring documentation 사용하여 재 작성 수 :

public class DbDaoImpl implements DbDao { 

    private JdbcTemplate jdbcTemplate; 

    public void setDataSource(DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    }  
    ... 
} 

당신은 애플리케이션 컨텍스트 XML에서 jdbcTemp 항목을 삭제할 수 있습니다. 대신 DAO를 스프링 관리하여 다음과 같이 항목을 작성하십시오.

<bean id="dbDao" class="DbDaoImpl"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
+0

답변을 주셔서 감사합니다.하지만이 작업을 수행해야합니다. DriverManager 사용 – jasim

+0

@jasim : ?? 나는 DriverManager를 사용하지 않는다고 말하지 않았다. Dao를 봄 관리 빈으로 만듭니다. –

0

때문이다 그 너는 새로운 i를 창조한다. 때마다 nstance : 더

new DbDao().getJdbctemplate(); 

과 :

new ClassPathXmlApplicationContext("appContext.xml"); 

그것은 봄의 문제가되지 않습니다. 그것은 당신의 디자인에 달렸습니다.

그리고 난 그냥 올바른 자바 코드로 당신을 도울 줄 모르겠다 : 어쨌든 public static void main(String[] args)의 경우에는 그들과 거래를 얻기 위해 객체를 인스턴스화해야합니다.

은, 당신의 DAO는 애플리케이션 컨텍스트에 대해 알고 안되며, 명시 적으로 그 안에 물건을 찾고 안

+0

이제 프로그램을 실행할 때마다 봄 컨텍스트가로드 될 때이 작업을 수행하는 방법에 대해 알게되었습니다. – jasim

+0

죄송합니다 : Java에 대해 얼마나 알고 있습니까? 프로그램 ('java com.pinovus.dbconnection.test')을 실행할 때마다 컨텍스트가 생성 될뿐만 아니라 JVM –

+0

이 어리석은 질문에 대해 유감스럽게 생각하기 시작합니다. 더 많은 것을 알아야합니다. – jasim

관련 문제