본문 바로가기

Spring/Toby의 스프링3 따라하기

spring boot datasource만들기

728x90

spring boot datasource만들기

 

DataSourceConfiguration.java

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

@Slf4j
@Configuration
public class DataSourceConfiguration {

    @Value("$")
    private String dbDriverClassName;

    @Value("$")
    private String dbURL;

    @Value("$")
    private String userName;

    @Value("$")
    private String password;

    @Bean
    public DataSource dataSource() {
        log.info("Connecting to database...");
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(dbDriverClassName);
        dataSource.setUrl(dbURL);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);

        return dataSource;
    }
}
application.yml
spring:
  datasource:
    driver-class-name: com.amazon.redshift.jdbc4.Driver
    url: jdbc:redshift://hello.host.redshift.amazonaws.com:5439/dev
    username: app
    password: 1234567890
UserEventsDao.java
@Component
@Slf4j
public class UserEventsDao {

    @Autowired
    private DataSource dataSource;

    public void add(User user) throws SQLException {
        Connection c = dataSource.getConnection();

        PreparedStatement ps = c.prepareStatement("insert into user(id, createdat, email) values(?,?,?)");
        ps.setString(1, user.getId());
        ps.setString(2, user.getCreatedat());
        ps.setString(3, user.getEmail());
       
        ps.executeUpdate();

        ps.close();
        c.close();

    }

 

Spring Data Jpa를 쓰다가 Aws Redshift로 Datawarehouse(데이터 웨어하우스)를 만드는데 ㅋㅋ 죄다 영어네요ㅋㅋ

 

aws 레드쉬프트는 jpa가 지원을 안해줍니다. 로딩 할 때 에러나서 되는 구간이 있긴 한데 잘 안돼서 정말 옛날 대딩때 해봤던 Connection, PreparedStatement등 거의 네이티브에 가까운 코드로 하니까 db io가 되어서 어쩔 수 없이 쓰기로 했습니다.

 

그런데 생각해보니 옛날에 토비의 스브링3 공부 할 때 jdbcTemplete등을 손으로 만드는 예제를 하면서 스프링을 공부 했었는데 정 안되면 이걸 써야겠다고 생각을 하고 작업을 하는데 DataSource가 생각나서 이 글을 씁니다.

 

거의 네이티브 코드는 Connection 오브젝트를 만들어서 쓰는데 자바에서 DataSource를 만들어주어서 이걸 쓰는게 좋다고 자바에서도 권장했습니다. DataSource를 만드는 코드가 위 코드입니다.

 

그냥 Connction Object를 쓰는것과 DataSource를 사용하는 차이점은 Pooling이 들어가고 안들어가고 차이라고 합니다. 폴링을 아주 오래전에 한번 접해본 적이 있는데 요즘은 프레임웍이 대체로 해줘서 그 세부 내용까지 신경을 안쓰고 서비스를 만들어도 천운인지 아니면 사용자가 그렇게 많지 않아서 그런지(1만명 쯤도 이걸로 됐음) 운영 하는데 크게 문제가 없었기 때문에 모르고 쓰다가 이번에 문서를 찾아보면서 알아보게 되었습니다.

 

@Autowired로 Di해서 Dao에서 사용했습니다.

 

이렇게 하면 DataSource를 빈으로 만들어서 한번만 띄워도 됩니다. 매번 Connection c = new Connection() 이걸 쿼리 날릴 때 마다 실행 안해도 됩니다.

 

end.

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.