티스토리 뷰
ConnectionMaker에서 Datasource로 바꾸기
Toby Spring3에서 ConnectionMaker에서 DataSource로 넘어가는 과정이 있습니다.
SimpleDriverDataSource는
'org.springframework:spring-jdbc:5.3.12'
가 필요 합니다.
public class DaoFactory {
private ConnectionMaker connectionMaker(){
BinaryConnectionMaker binaryConnectionMaker = new BinaryConnectionMaker();
return binaryConnectionMaker;
}
private DataSource dataSource() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriverClass(com.mysql.cj.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://database-2.clvwtbd3pi7c.ap-northeast-2.rds.amazonaws.com/bmwgs");
dataSource.setUsername("admin");
dataSource.setPassword("12345678");
return dataSource;
}
public UserDao userDao(){
UserDao userDao = new UserDao(connectionMaker());
return userDao;
}
}
DaoFactory에 직접 설정 하는 경우
SimpleDriverDataSource()에 접속정보를 넣고 만듭니다.
@Configuration
public class DaoFactory {
@Bean
public CarModelDao carModelDao(){
return new CarModelDao(new JdbcContext(dataSource()));
}
@Bean
public DataSource dataSource(){
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriverClass(com.mysql.cj.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://database-2.clvwtbd3pi7c.ap-northeast-2.rds.amazonaws.com/bmwgs");
dataSource.setUsername("admin");
dataSource.setPassword("12345678");
return dataSource;
}
}
application.yml에 설정하는 경우
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;
}
}
spring:
datasource:
driver-class-name: com.amazon.redshift.jdbc4.Driver
url: jdbc:redshift://hello.host.redshift.amazonaws.com:5439/dev
username: app
password: 1234567890
@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.
'Spring > Toby의 스프링3 따라하기' 카테고리의 다른 글
토비의스프링3 JdbcTemplate의 queryForObject (0) | 2021.11.13 |
---|---|
토비의 스프링3 JdbcContext만들기 (0) | 2021.11.09 |
내 꿈은 유투버 스프링 동영상 강좌 - 02 Intellij 설치 java hello world 출력 (0) | 2016.11.28 |
내 꿈은 유투버 스프링 동영상 강좌 - JDK설치 (0) | 2016.11.28 |
UserDao Test code (0) | 2016.05.18 |
- Total
- Today
- Yesterday
- docker container case
- shellscript
- docker container tissue
- 개발자
- 도커각티슈케이스
- Sh
- docker container tissue box
- 2017 티스토리 결산
- docker container whale
- docker container
- 도커티슈박스
- Linux
- 도커티슈케이스
- 도커각티슈박스
- 이직
- 싱가폴
- vim
- 도커컨테이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |