2013년 9월 11일 수요일

datasource 관련

spring 에서 sql connection 을 위한 db 접속정보를 설정할때 보통 datasource 를 통해서 기본정보들을 넣어주게 된다


            
 
    
 
       
 
 


위에는 datasource 생성은 빠져있다. 만약 xml형태로 설정을 한다면 보안상 문제가 될 소지가 있다.
그래서 source 상에서 암호화를 통해 설정하는 방식도 존재한다.

하지만 db connection 을 위해서는 datasource 를 생성해야 하고 xml 상에서 생성 할 수 없다면
source 내에서 new 로 생성을 할 수 밖에 없다. 하지만 spring framework 특성상 DI 법칙에 따라 
생성을 주도 할 수 있는 entrypoint 가 존재하지 않는다.
따라서 다음과 같은 방법을 사용한다.

package com.jetddo.study.config;

import java.io.IOException;

import javax.sql.DataSource;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.jetddo.study.util.Base64Decoder;

@Configuration
public class DataSourceConfig {
 
 @Bean(destroyMethod="close")
 public DataSource dataSource() throws IOException {
  
  BasicDataSource dataSource = new BasicDataSource();
  dataSource.setDriverClassName(Base64Decoder.decode("b3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlcg=="));
  dataSource.setUrl(Base64Decoder.decode("amRiYzpvcmFjbGU6dGhpbjpAMTI3LjAuMC4xOjE1MjE6b3JjbA=="));
  dataSource.setUsername(Base64Decoder.decode("amV0ZGRv"));
  dataSource.setPassword(Base64Decoder.decode("Y2RtYTIwMDQ="));
  dataSource.setDefaultAutoCommit(false);
  
  return dataSource;
  
 }
}

@Configuration, @Bean 의 어노테이션이 보일거다.
@Configuration 이 것은 이 java class 는 spring의 설정 역할이라는 것을 알려준다.
그리고 @Bean 은 이 메소드에서 리턴 되는 객체는 spring의 Bean객체라는 것을 알려준다.
즉 위 클래스는 소스상에서 자동으로 bean객체를 생성한다.

또한 @Configuration 은 @Component 어노테이션을 meta-annotation 으로 가지고 있기 때문에
component-scan 을 통해 자동으로 bean 으로 등록이 된다.

댓글 없음:

댓글 쓰기