Spring Boot - JDBC 연결과 DataSource(MariaDB)

2024. 12. 14. 14:53·Spring

https://docs.spring.io/spring-boot/reference/data/sql.html

 

SQL Databases :: Spring Boot

The Reactive Relational Database Connectivity (R2DBC) project brings reactive programming APIs to relational databases. R2DBC’s Connection provides a standard method of working with non-blocking database connections. Connections are provided by using a C

docs.spring.io

 

1. 프로젝트 설정

1-1. 의존성 추가

Sprign Boot 프로젝트의 build.gradle 또는 pom.xml 파일에 필요한 의존성을 추가합니다.

Gradle 예시

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'  // JDBC API
    implementation 'org.mariadb.jdbc:mariadb-java-client' // MariaDB JDBC 드라이버
}

2. 데이터베이스 설정

2-1. application.properties

# 데이터베이스 URL 및 인증 정보
spring.datasource.url=jdbc:mariadb://localhost:3306/your_database_name
spring.datasource.username=your_username
spring.datasource.password=your_password

# JDBC 기본 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.initialization-mode=always

2-2. application.yml (YAML 형식)

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/your_database_name
    username: your_username
    password: your_password
    driver-class-name: org.mariadb.jdbc.Driver
    initialization-mode: always


DataSource?

  • 데이터베이스 연결 풀(Connection Pool)을 생성, 관리하고, 효율적인 연결 재활용을 제공한다.
  • Spring Boot는 DataSource를 자동으로 구성하며, 주요 구현체로는 HikariCP, Apache DBCP, Tomcat JDBC Connection Pool 등이 사용됩니다.
  • 기본적으로 Spring Boot는 HikariCP를 사용.

3. DataSource를 직접 확인

Spring Boot에서 구성된 DataSource 객체를 직접 확인하려면 @Bean이나 @Autowired를 사용하여 주입받을 수 있다.

확인용 Controller 작성

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;

@RestController
public class DataSourceController {

    @Autowired
    private DataSource dataSource;

    @GetMapping("/datasource-info")
    public String getDataSourceInfo() {
        StringBuilder info = new StringBuilder();
        info.append("DataSource Class: ").append(dataSource.getClass().getName()).append("<br>");
        try {
            info.append("JDBC URL: ").append(dataSource.getConnection().getMetaData().getURL()).append("<br>");
            info.append("DB Username: ").append(dataSource.getConnection().getMetaData().getUserName()).append("<br>");
        } catch (Exception e) {
            info.append("Error retrieving DataSource info: ").append(e.getMessage());
        }
        return info.toString();
    }
}

실행 결과

애플리케이션을 실행한 뒤 브라우저에서 http://localhost:8080/datasource-info로 접속하면 DataSource 정보가 출력됨.


4. DataSource를 Bean으로 명시적 등록하기

Spring Boot의 자동 설정 대신 명시적으로 DataSource를 정의할 수 있음

명시적 등록 예제

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mariadb://localhost:3306/your_database_name");
        dataSource.setUsername("your_username");
        dataSource.setPassword("your_password");
        dataSource.setMaximumPoolSize(10);  // 최대 커넥션 수
        return dataSource;
    }
}

5. 커넥션 풀 기본 개념

Spring Boot의 기본 데이터베이스 연결 풀인 HikariCP의 특징 :

  1. 빠르고 경량화된 커넥션 풀
  2. 최소 / 최대 커넥션 풀 크기를 조정 가능
  3. spring.datasource.hikari를 통해 세부 설정 가능

주요 설정 옵션:

설정 키  설명 기본값
spring.datasource.hikari.maximum-pool-size 최대 커넥션 풀 크기 10
spring.datasource.hikari.minimum-idle 최소 유휴 커넥션 수 10
spring.datasource.hikari.connection-timeout 연결 대기 시간(ms) 30000
spring.datasource.hikari.idle-timeout 유휴 커넥션 제거 시간(ms) 600000

'Spring' 카테고리의 다른 글

MyBatis 개요  (1) 2024.12.15
RowMapper와 BeanPropertyRowMapper  (1) 2024.12.15
JDBC API - JDBC Template  (1) 2024.12.14
[Spring] Java Bean vs POJO vs Spring Bean  (1) 2024.07.22
Spring Container  (0) 2024.07.20
'Spring' 카테고리의 다른 글
  • RowMapper와 BeanPropertyRowMapper
  • JDBC API - JDBC Template
  • [Spring] Java Bean vs POJO vs Spring Bean
  • Spring Container
jhyngu
jhyngu
취업하자.
    티스토리 홈
    |
  • jhyngu
    jhyngu
    jhyngu
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • Dev (151)
      • Java (2)
      • Spring (51)
      • Spring Security (39)
        • JWT (22)
        • OAuth2 (17)
      • Kotlin (2)
      • React (6)
      • Coding Test (28)
      • DB (0)
      • Git (5)
      • Linux (14)
      • docker (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    api client
    MVC
    Postman
    JavaScript
    Linux
    백준
    MariaDB
    Spring Security
    알고리즘
    spring web
    git
    OAuth2
    oauth2
    react
    JWT
    Spring Framework
    Spring
    mybatis
    JDBC
    Spring Boot
  • hELLO· Designed By정상우.v4.10.3
jhyngu
Spring Boot - JDBC 연결과 DataSource(MariaDB)
상단으로

티스토리툴바