Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags more
Archives
Today
Total
관리 메뉴

개발합니다

[Spring] JdbcTemplate & 커넥션풀 본문

Web/Spring

[Spring] JdbcTemplate & 커넥션풀

돈기법 2022. 3. 28. 10:50

JDBC (Java Database Connectivity)

자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API.

 

 

JdbcTemplate

매번 작업이 되는 드라이버 로딩, DB 연결, 자원해제 부분을 한 번에 처리해서 
SQL 작성 및 전송 부분에만 집중할수 있게 해주는 템플릿.

 

 

커넥션풀

데이터베이스 커넥션을 미리 만들어놓고 사용하는 방법
c3p0 모듈의 ComboPooledDataSource를 이용해 만들 수 있다. 반드시 예외처리를 해주어야 한다.

 

스프링 설정 파일에 빈(Bean) 객체로 생성하는 방법과 config 파일로 작성해서 사용하는 방법이 있다.

 

[DBConfig.java]

@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;

	}
	
}

 

[MemberDao.java]

@Repository
public class MemberDao implements IMemberDao {

	private JdbcTemplate template;
	
	@Autowired
	public MemberDao(ComboPooledDataSource dataSource) {
		this.template = new JdbcTemplate(dataSource);
	}
	
	@Override
	public int memberInsert(final Member member) {
		
		int result = 0;
		
		final String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)";

		result = template.update(sql, new PreparedStatementSetter() {
			
			@Override
			public void setValues(PreparedStatement pstmt) throws SQLException {
				pstmt.setString(1, member.getMemId());
				pstmt.setString(2, member.getMemPw());
				pstmt.setString(3, member.getMemMail());
				
			}
		});
		
		return result;
		
	}
 }

dataSource에 담긴 데이터베이스 커넥션 정보를 JdbcTemplate에 넣어서 사용한다.

==> 매번 커넥션을 생성할 필요가 없어 메모리가 절약되고, 유지보수가 용이하다.