[Spring] Hikari 이용하여 데이터베이스 연결 관리하기

2023. 3. 2. 18:16·SpringBoot

0. 시작하기 전

JDBC 란?

  • JDBC( Java Database Connectivity ) 란 자바에서 데이터베이스에 접속하기 위한 표준 인터페이스를 뜻함
  • 데이터베이스와 연결할 때마다 새로운 커넥션을 생성 & 연결하는 비용을 줄이기 위한 기술

JDBC 커넥션 풀 구현체란?

  • 커넥션 풀링 기능을 제공하는 라이브러리
  • 데이터베이스에 연결할 때 생성된 커넥션 풀에서 사용
  • 커넥션 풀 크기, 커넥션 대기 시간, 커넥션 최대 최소 수 등  설정 가능
  • 구현체 종류 : Apache Commons DBCP, HikariCP, Tomcat JDBC 등

Hikari 란?

  • Spring Framework에서 사용되는 데이터베이스 커넥션 풀 라이브러리
  • HikariCP라고도 불림
  • 빠르고 경량화된 JDBC 커넥션 풀 구현체
  • Spring Hikari는 데이터베이스 커넥션 풀을 관리하는 데 매우 효율적

Hikari 장점

  • 다른 커넥션 풀 라이브러리와 비교했을 때 더 빠른 응답 시간과 더 낮은 메모리 사용량을 제공
  • 설정이 간단하고 사용하기 쉬우며, 대부분의 경우 디폴트 설정을 그대로 사용해도 높은 성능을 보장

결론

  • Spring Hikari는 Spring Boot에서 기본 커넥션 풀 라이브러리로 사용됨
  • Spring 애플리케이션에서 데이터베이스 연결을 관리할 때 많이 사용됨

1. yml 파일과 config 파일

application.yml

primary:
  datasource:
    hikari:
      jdbc-url: jdbc:postgresql://localhost:0000/dbName
      driver-class-name: org.postgresql.Driver
      username: 이름
      password: 비번

    hibernate:
      "[hibernate.hbm2ddl.auto]": none
      property:
        "[hibernate.dialect]": org.hibernate.dialect.PostgreSQLDialect
        "[hibernate.show_sql]": true
        "[hibernate.hbm2ddl.auto]": none
        "[hibernate.cache.use_second_level_cache]": false
        "[hibernate.cache.use_query_cache]": false
        
secodary:
  datasource:
    hikari:
      jdbc-url: jdbc:postgresql://localhost:0000/dbName
      driver-class-name: org.postgresql.Driver
      username: 이름
      password: 비번

    hibernate:
      "[hibernate.hbm2ddl.auto]": none
      property:
        "[hibernate.dialect]": org.hibernate.dialect.PostgreSQLDialect
        "[hibernate.show_sql]": true
        "[hibernate.hbm2ddl.auto]": none
        "[hibernate.cache.use_second_level_cache]": false
        "[hibernate.cache.use_query_cache]": false

PrimaryDataSourceConfig

  • 두 번째, 세 번째 등 다른 테이블도 연동할 때는 같은 파일을 생성하면 된다.
  • 옮길 때는 "com.example~" 부분을 연결할 테이블과 레파지토리의 경로를 옮기면 된다.
package com.example.Voc.config;

import com.zaxxer.hikari.HikariConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfiguAre.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import com.zaxxer.hikari.HikariDataSource;

import java.sql.SQLException;
import java.util.HashMap;

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "primaryEntityManagerFactory",
        transactionManagerRef = "primaryTransactionManager",
        basePackages = "com.example.primary.repository"
)

@Slf4j
public class PrimaryDataSourceConfig {

    @Autowired
    private Environment environment;

    @Bean(value = "PrimaryHibernateProperties")
    @ConfigurationProperties("primary.datasource.hibernate")
    public HashMap<String, Object> PrimaryHibernateProperties() {
        return new HashMap<String, Object>();
    }

    @Primary
    @Bean
    public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory() {

        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(primaryDataSource());
        em.setPackagesToScan("com.example.primary.entity");
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        final HashMap<String, Object> properties = PrimaryHibernateProperties();
        System.out.println("properties Map ="+properties);
        System.out.println("properties Map ="+properties);

        em.setJpaPropertyMap(properties);

        return em;
    }

    @Primary
    @Bean
    public PlatformTransactionManager primaryTransactionManager() {
        final JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(primaryEntityManagerFactory().getObject());
        return transactionManager;
    }

    @Primary
    @Bean
    @ConfigurationProperties("primary.datasource.hikari")
    public HikariConfig hikariConfig() {
        HikariConfig hikariConfig = new HikariConfig();
        return hikariConfig;
    }

    @Primary
    @Bean
    public DataSource primaryDataSource() {
        return new HikariDataSource(hikariConfig());
    }


}

 

'SpringBoot' 카테고리의 다른 글

[Spring] Spring Bean 생성 주기 및 어노테이션 비교  (1) 2023.05.03
[Spring] @Scheduled 스케쥴링 적용 방법  (0) 2023.03.08
[Spring] Jpa 이용해서 db 에 entity 추가  (0) 2023.01.18
[Spring] Spring 환경 IntelliJ에 구축  (0) 2023.01.11
[Spring] 포트번호 오류 해결  (0) 2022.12.22
'SpringBoot' 카테고리의 다른 글
  • [Spring] Spring Bean 생성 주기 및 어노테이션 비교
  • [Spring] @Scheduled 스케쥴링 적용 방법
  • [Spring] Jpa 이용해서 db 에 entity 추가
  • [Spring] Spring 환경 IntelliJ에 구축
ssddo
ssddo
구경하고 가세요
  • ssddo
    ssddo-story
    ssddo
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • SpringBoot (9)
      • webFlux (2)
      • DB (8)
        • MySQL (3)
        • Mongo (3)
        • Docker (1)
        • Postgres (1)
      • JAVA (1)
      • ORM & DSL (4)
        • JPA (3)
        • JOOQ (1)
      • React (12)
        • 설치 및 환경 구축 (1)
        • 기본 (4)
        • 활용 (7)
      • CS (1)
      • 공통 (6)
      • 프로젝트 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    복호화
    mongo
    암호화
    Java
    블록
    springboot
    JPA
    Redisson
    git
    postgre
    docker
    jooq
    RSS
    react
    패딩
    MySQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ssddo
[Spring] Hikari 이용하여 데이터베이스 연결 관리하기
상단으로

티스토리툴바