새소식

반응형
Java/Spring

HikariCP

  • -
반응형

HikariCP

HikariCP란 Springboot 2.0부터 default로 설정되어 있는 DB Connetcion Pool로써 Zero-Overhead가 특징으로

높은 성능을 자랑하는 DB Connection Pool이다. HikariCP는 미리 정해놓은 만큼의 Connection 객체를

Connection Pool에 담아 놓습니다. 그 후에 요청이 들어올 때 Thread가 Connection을 요청하고 Hikari는 

Connection Pool 내에 있는 Connection 객체를 연결해주는 역할을 한다.

 

1. dependency 추가

아래 이미지와 같이 hikari는 spring-boot-starter-jdbc에 포함되어 있다고 합니다. spring-boot-hikari에 아래 이미지와 같이

설명되어 있습니다.

또한 본인은 mariadb DB를 사용하기 때문에 mysql dependency를 추가했습니다.

 

spring-boot-configuration-processor 는 나중에 사용할 @ConfigurationProperties 어노테이션을 사용하기 위해 추가했다.

https://www.baeldung.com/spring-boot-hikari

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java  -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>

 

spring-boot-starter-jdbc

Spring Boot 에서 db jdbc 를 위한 의존성 추가

 

mysql-connector-java

본인 DB가 MariaDB 이므로 Mysql DB 연결을 위한 의존성 추가

 

spring-boot-configuration-processor

@ConfigurationProperties 어노테이션을 사용하기 위한 의존성 추가

@ConfigurationProperties 어노테이션은 *.properties, *.yml 파일에 있는 property 설정들을

자바 클래스에 값을 가져와 사용할 수 있게 해주는 어노테이션이다.

 

mybatis-spring-boot-starter

DB 커넥션을 더 쉽고 빠르게 도와주는 Mybatis 라이브러리 의존성 추가

 

2. application.properties 또는 application.yml 에 datasource config 정보 설정

본인은 yml에 datasource hikari 정보를 설정했다.

아래 정보를 보면 spring: datasource: hikari: 로 추가하면 된다.

spring:
  datasource:
    hikari:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://192.168.56.1:3306/DB명?serverTimezone=UTC&characterEncoding=UTF-8
      username: DB 계정
      password: DB 패스워드

 

3. Hikari Config 설정(Bean 설정)

Config를 설정할 Class 파일을 생성한다. 패키지 밑에 아무 경로나 상관없다.

DBConfig 파일에 아래와 같이 내용을 추가한다.

@Configuration
@MapperScan(basePackages="com.baram.mapper")
public class DBConfig {
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    public HikariConfig hikariConfig() {
        return new HikariConfig();
    }

    @Bean
    public DataSource dataSource() throws Exception {
        return new HikariDataSource(hikariConfig());
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(
        new PathMatchingResourcePatternResolver().getResources("classpath:com/baram/mapper/xml/**/*.xml")
        );
        return bean.getObject();
    }

    @Bean
    @Primary
    public SqlSession sqlSession(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

 

@Configuration

@Configuration 어노테이션을 통해 해당 Java class 파일은 스프링 IOC 컨테이너가 관리하는 Bean 구성 클래스파일이라는걸 알려준다.

 

@Bean

@Configuration 어노테이션이 선언된 클래스에서 @Bean 어노테이션을 사용하여 빈(자바 객체)을 등록하여 사용한다.

 

@ConfigurationProperties(prefix="property 값")

*.properties, *.yml 파일에 있는 property 설정들을 자바 클래스에 값을 가져와 사용할 수 있게 해주는 어노테이션

 

SqlSessionFactory

SQL 쿼리문을 수행하는 SqlSession 을 생성하기 위한 구성요소

 

SqlSessionFactoryBean

SqlSessionFactory를 생성하기 위해선 MyBatis 설정파일이 필요하지만 SqlSessionFactoryBean을 사용하여

설정파일 없이 SqlSesisonFactory를 생성한다.

 

new PathMatchingResourcePatternResolver().getResources()

classpath 경로에 위치한 resource 정보를 가져오기 위한 클래스이다.

new PathMatchingResourcePatternResolver().getResources("classpath:com/baram/mapper/xml/**/*.xml")

를 통해 classpath 경로의 com.baram.mapper.xml 에 위치한 모든 리소스들을 가져오기 위해 설정했다.

 

getResource() 메서드는 정규식 표현이 아닌 한개의 리소스를 가져올때 사용하며,

getResources() 메서드가 정규식 표현이 가능하다.

 

 

4. Mapper 파일 생성

설정한 Hikari Connection Pool 을 사용하여 DB 쿼리문을 날려보자

쿼리문을 날릴 Mapper Interface 와 xml 파일을 생성한다. 본인은 테스트를 위해 아래 이름과 같이 생성했다.

- BoastMapper Interface (인터페이스로 생성해야한다.)

@Mapper
public interface BoastMapper {
    public int getBoastListCount();
}

- BoastMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "
http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.baram.mapper.boast.BoastMapper">
    <select id="getBoastListCount" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM server_info
    </select>
</mapper>

 

BoastMapper 인터페이스의 메서드 이름과 BoastMapper.xml 파일의 select 태그 id 이름은 매칭시켜야 합니다.

 

 

5. Service 파일 생성

아래와 같이 java 클래스를 생성한다.

@Service
public class BoastService {
    private SqlSession sqlSession;

    public BoastService(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public void count() {
        BoastMapper mapper = sqlSession.getMapper(BoastMapper.class);
        System.out.println("##############################");
        System.out.println("count : "+mapper.getBoastListCount());
    }
}

 

private SqlSession sqlSession;

설정한 Hikari DataSource 설정내용을 가지고 쿼리문을 실행하는 SqlSession 이다.

해당 SqlSession 은 DBConfig 파일에서 Bean 으로 등록해놓았기 때문에 호출하여 사용할 수 있는것이다.

 

public BoastService(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
}

생성자 주입을 통해 의존성 주입을 했다.

 

6. Controller 파일 생성

해당 controller 패키지 밑에 Controller 자바 클래스를 생성한다.

쿼리문을 호출하는 Service 를 주입하여 count() 메서드를 호출하면 아래와 같이 결과값이 나온다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.