Everything has an expiration date
[inflearn] 20240121 [스프링-프레임워크] - 25강 필기 본문
[Inflearn]/자바 스프링 프레임워크(renew ver.)
[inflearn] 20240121 [스프링-프레임워크] - 25강 필기
Jelly-fish 2024. 1. 22. 00:2525강 - 커넥션 풀
데이터베이스 연결을 미리 준비해 놓고 사용하는 방법에 대해서 살펴본다.
25-1 c3p0 모듈의 ComboPooledDataSource
25-2 스프링 설정파일을 이용한 DataSource 설정
25-1 c3p0 모듈의 ComboPooledDataSource
`com.mchange.v2.c3p0.ComboPooledDataSource`
dataSource = new DriverManagerDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(userid);
dataSource.setPassword(userpw);
▶ driver, url, 계정 ID, PW 를 set → `DataSource` 이용.
25-2 스프링 설정파일을 이용한 DataSource 설정
<beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<beans:property name="user" value="scott" />
<beans:property name="password" value="tiger" />
<beans:property name="maxPoolSize" value="200" />
<beans:property name="checkoutTimeout" value="60000" />
<beans:property name="maxIdleTime" value="1800" />
<beans:property name="idleConnectionTestPeriod" value="600" />
</beans:bean>
`DataSource`
→ 데이터베이스 연결과 관련된 정보들 (driver, url, userId, password) 을 갖고 있는 객체.
Spring 또는 c3p0 모듈에서 제공해 주는 것을 사용할 수 있다.
이외에도... `ComboPooledDataSource` 에서 DataSource를 얻어낼 수 있다!
ComboPooledDataSource 를 사용할 때, 기존 방식과의 차이점
`DriverManagerDataSource`를 이용할 때는 예외 처리를 하지 않아도 됐지만,
※ `ComboPooledDataSource` 를 이용하여 `DataSource`를 관리할 때는 반드시 예외 처리를 해 주어야 한다.
Ⅰ. `ComboPooledDataSource` 를 사용하되, 의존 주입(DI)을 하지 않았을 경우
MemberDao.java - `ComboPooledDataSource` 를 사용하여, 예외 처리한 부분.
public MemberDao()
{
dataSource = new ComboPooledDataSource();
try
{
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(userid);
dataSource.setPassword(userpw);
} catch (PropertyVetoException e) //-- 예외 처리 check!!!
{
e.printStackTrace();
}
template = new JdbcTemplate();
template.setDataSource(dataSource);
}
MemberDao.java - 상단 import 구문과 생성자 부분
package com.ho.lec24.member.dao;
import java.beans.PropertyVetoException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.ho.lec24.member.Member;
import com.mchange.v3.c3p0.ComboPoolDataSource;
@Repository
public class MemberDao implements IMemberDao
{
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:xe";
private String userid = "scott";
private String userpw = "tiger";
private ComboPoolDataSource dataSource;
private JdbcTemplate template;
public MemberDao()
{
dataSource = new ComboPooledDataSource();
try
{
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(userid);
dataSource.setPassword(userpw);
} catch (PropertyVetoException e) //-- 예외 처리 check!!!
{
e.printStackTrace();
}
template = new JdbcTemplate();
template.setDataSource(dataSource);
}
....
}
Ⅱ. `ComboPooledDataSource` 를 사용하면서, 의존 주입(DI)을 사용했을 경우
① 스프링 설정 파일 (servlet-context.xml)에 `ComboPooledDataSource` 객체 생성
servlet-context.xml (=dispatcher-servlet.xml)
<!-- ComboPooledDataSource 에 대한 객체 생성. -->
<beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<beans:property name="user" value="scott" />
<beans:property name="password" value="tiger" />
<beans:property name="maxPoolSize" value="200" />
<beans:property name="checkoutTimeout" value="60000" />
<beans:property name="maxIdleTime" value="1800" />
<beans:property name="idleConnectionTestPeriod" value="600" />
</beans:bean>
② DAO 에서, 의존 주입 `@Autowired`을 통해 의존객체 `ComboPooledDataSource` 주입받기.
MemberDao.java
@Repository
public class MemberDao implements IMemberDao
{
private JdbcTemplate template;
// 의존객체 자동주입!
@Autowired
public MemberDao(ComboPooledDataSource dataSource)
{
this.template = new JdbcTemplate(dataSource);
}
....
}
▶ 의존객체 자동 주입 `@Autowired` 을 통해, 스프링 설정파일(servlet-context.xml)에 구성해 둔
`ComboPooledDataSource` 객체가 `MemberDao()` 생성자에 매개변수로 자동 주입 된다!
Ⅲ. `ComboPooledDataSource` 를 사용하면서, Config 파일(.java 파일)을 사용했을 경우.
① 스프링 설정파일의 Bean 객체를 대신할 Configuration 파일을 만든다.
DBConfig.java
package com.ho.lec24.config;
import java.beans.PropertyVetoException;
@Configuration
public class DBConfig
{
@Bean
public ComboPooledDataSource dataSource() throws PropertyVetoException
{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");
dataSource.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setMaxPoolSize(200);
dataSource.setCheckoutTimeout(60000);
dataSource.setMaxIdletime(1800);
dataSource.setIdleConnectionTestPeriod(600);
return dataSource;
}
}
② DAO 에서, 의존 주입 `@Autowired`을 통해 의존객체 `ComboPooledDataSource` 주입받기.
MemberDao.java
@Repository
public class MemberDao implements IMemberDao
{
private JdbcTemplate template;
// 의존객체 자동주입!
@Autowired
public MemberDao(ComboPooledDataSource dataSource)
{
this.template = new JdbcTemplate(dataSource);
}
....
}
실행 결과 스크린샷
'[Inflearn] > 자바 스프링 프레임워크(renew ver.)' 카테고리의 다른 글
[inflearn] 20240121 [스프링-프레임워크] - 24강 필기 (0) | 2024.01.21 |
---|---|
[inflearn] 20240120 [스프링-프레임워크] - 23강 필기 (0) | 2024.01.21 |
[inflearn] 20240120 [스프링-프레임워크] - 21강 필기 (1) | 2024.01.20 |
[inflearn] 20240114 [스프링-프레임워크] - 20강 필기 (1) | 2024.01.14 |
[inflearn] 20240114 [스프링-프레임워크] - 19강 필기 (1) | 2024.01.14 |