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://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() 메서드를 호출하면 아래와 같이 결과값이 나온다.
'Java > Spring' 카테고리의 다른 글
RequestContextHolder (0) | 2022.05.11 |
---|---|
@configurationProperties (0) | 2022.05.03 |
<util:properties> 태그를 이용한 Context 파일에 프로퍼티 등록 (0) | 2022.05.02 |
Dynamic Web Project 만들기 2 - 프로젝트 기본 설정(1) (0) | 2022.05.01 |
Spring Context (0) | 2022.04.29 |
소중한 공감 감사합니다