DBCP는 DataBase Connection Pool이다.
connection을 여러개 미리 만들어 놓고 필요할 때 마다 가져다 쓰는 것이다.
몇 개를 만들어놓을지, 얼마나 응답이 없으면 error를 던질지 등의 여러가지 설정을 할 수 있다.
DBCP가 애플리케이션 성능에 아주 핵심적인 역할을 한다.
스프링부트는 기본적으로 HikariCP라는 DBCP를 선택했다.
application.properties에 spring.datasource.사용하는DBCP이름.설정값=
으로 설정한다.
pom.xml에 mysql에 접속할 수 있는 connector(jdbc 구현체) 의존성을 추가해줘야한다.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
그 다음에 MySQL을 설치해줘야한다.
도커를 사용하면 MySQL을 쉽게 설치할 수 있다.
*도커란? 컨테이너 솔루션이다. 커널을 공유하여, 가상머신보다 훨씬 빠르게 설치할 수 있다.
터미널로 아래의 명령어를 입력한다.
docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=junseo -e MYSQL_PASSWORD=pass -d mysql
컨테이너에 있는 3306포트를 localhost의 3306포트로 연결해달라는 뜻. mysql_boot는 이 컨테이너의 이름이고, MySQL 설정들을 해준 것이다.
그리고 docker ps를 실행해보면 mysql 인스턴스를 확인할 수 있다.
mysql에 접속하려면 application.properties에 다음 설정을 적어준다.(아까 mysql 설치때 설정해준 값들)
터미널로 mysql에 접속하려면,
아래의 명령어를 입력한다. 컨테이너 안에 들어가서 bash를 실행하라는 명령어이다.
docker exec -i -t mysql_boot bash
mysql -u mysql계정
-p 으로 접속한다.
그 다음 MySQL 러너를 만들어 mysql에 쿼리를 던져보겠다.
(러너 코드)
package com.junseo.springbootjdbc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;
@Component
public class MySQLRunner implements ApplicationRunner {
@Autowired
DataSource dataSource;
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public void run(ApplicationArguments args) throws Exception {
// 기본 jdbc api
try(Connection connection = dataSource.getConnection()) { // connection이라는 리소스를 try안에서 사용하고, 정리를해준다.
// db 정보 출력
System.out.println(dataSource.getClass()); // DBCP 정보
System.out.println(connection.getMetaData().getURL());
System.out.println(connection.getMetaData().getUserName());
// USER 테이블 생성
Statement statement = connection.createStatement();
String sql = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))";
statement.executeUpdate(sql);
}
// 기본적인 jdbc api 사용보다 좀 더 편하다.
jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'junseo')");
}
}
USER 테이블이 만들어져있고, junseo라는 값이 들어가있는 것을 볼 수 있다.