[SpringBoot] 스프링부트, mysql 데이터베이스 연결

2022. 12. 22. 12:49JAVA/Spring

1. 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'mysql:mysql-connector-java'

 

2. docker container를 사용한 MySQL 추가

우분투 운영체제에 다음과 같은 docker 명령어를 실행하여 mysql 컨테이너를 생성하여 실행시킵니다.

 

 

$ docker run -p 3306:3306 —name mysql_boot -e MYSQL_ROOT_PASSWORD=1 
-e MYSQL_DATABASE=springboot -e MYSQL_USER=yonghwan -e MYSQL_PASSWORD=pass -d mysql

 

mysql_boot 컨테이너에 bash를 실행하여 들어갑니다.

$ docker exec -i -t mysql_boot bash

 

yonghwan 계정으로 들어가서 테이블이 있는지 조회합니다.

bash-4.4 # mysql -u yonghwan -p
Enter Password: 

mysql> use springboot
mysql> show tables;

실행 결과 아직 테이블을 존재하지 않을 것입니다.

 

3. 데이터소스 설정

resource/application.properties

spring.datasource.hikari.maximum-pool-size=4
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=yonghwan
spring.datasource.password=pass

 

4. 데이터베이스 연결 테스트 코드 추가

@Component
@RequiredArgsConstructor
@Slf4j
public class MySqlRunner implements ApplicationRunner {
    private final DataSource dataSource;
    private final JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) {
        try(Connection connection = dataSource.getConnection()){
            log.info(String.valueOf(dataSource.getClass()));
            log.info(connection.getMetaData().getURL());
            log.info(connection.getMetaData().getUserName());

            Statement stmt = connection.createStatement();
            String sql = "CREATE TABLE USERS (ID INTEGER NOT NULL, name VARCHAR(255),  PRIMARY KEY (ID))";
            stmt.executeUpdate(sql);
        }catch (SQLException e){
            log.info("SQLException 발생 : " + e);
        }

        jdbcTemplate.execute("INSERT INTO USERS VALUES(1, 'yonghwan')");
    }
}

애플리케이션을 실행하고 docker mysql container의 데이터베이스를 확인합니다.

 

References

source code : https://github.com/yonghwankim-dev/springboot_practice/tree/main/mysql_demo/src/main
[인프런] 스프링부트 개념과 활용