일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Flask
- 워드파일
- vscdoe
- Device
- GIT
- zani
- git설치
- 미색인
- ipykernel
- 소스제공
- velocity_x
- handlebars.js
- extention
- 생명주기
- uni_links
- Jupyter Notebook
- flutter
- Anaconda
- 성경필사
- Share
- dynamic color
- cache
- dart
- python
- 개역개정
- annotation
- receive_sharing_intent
- widgetsBindingObserver
- google search console
- inheritedWidget
- Today
- Total
자니노트
HikariCP 란? 본문
목차
1. 개요
이 소개 튜토리얼에서는 HikariCP JDBC 커넥션 풀 프로젝트에 대해 설명합니다. 이는 매우 가볍고(약 130Kb), 2012년 경 Brett Wooldridge가 개발한 번개처럼 빠른 JDBC 연결 풀링 프레임워크입니다.
2. 시작하기
HikariCP의 성능을 c3p0, dbcp2, Tomcat 및 진동와 같은 다른 연결 풀링 프레임워크와 비교할 수 있는 벤치마크 결과가 몇 가지 있습니다.예를 들어, HikariCP 팀은 다음과 같은 벤치마크를 발표했습니다(원래 결과는 여기에서 확인할 수 있습니다).
다음과 같은 기술이 적용되었기 때문에 프레임워크는 매우 빠릅니다.
- 바이트 코드 레벨 엔지니어링– 일부 극단적인 바이트 코드 레벨 엔지니어링(어셈블리 레벨 네이티브 코딩 포함)이 수행되었습니다.
- 마이크로 최적화 – 거의 측정할 수 없지만 이러한 최적화가 결합되어 전체 성능이 향상됩니다.
- Collections 프레임워크를 인텔리전트하게 사용– ArrayList < Statement >는 커스텀 클래스인 FastList로 대체되었습니다.이 클래스는 범위체크를 없애고 머리부터 꼬리까지 삭제 스캔을 수행합니다.
3. Maven 의존관계
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
HikariCP는 6 및 7과 같은 오래된 JDK 버전도 지원합니다.적절한 버전은 이쪽과 이쪽에서 찾을 수 있습니다.Central Maven Repository에서도 최신 버전을 확인할 수 있습니다.
4. 사용 방법
이제 데모 애플리케이션을 만들 수 있습니다.pom.xml에 적절한 JDBC 드라이버 클래스의 의존성을 포함해야 합니다.종속성이 지정되지 않은 경우 응용 프로그램은 ClassNotFoundException을 슬로우합니다.
4-1. 데이터원본 생성
HikariCP의 DataSource를 사용하여 애플리케이션을 위한 단일 데이터 소스 인스턴스를 만듭니다.
public class DataSource {
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
static {
config.setJdbcUrl( "jdbc_url" );
config.setUsername( "database_username" );
config.setPassword( "database_password" );
config.addDataSourceProperty( "cachePrepStmts" , "true" );
config.addDataSourceProperty( "prepStmtCacheSize" , "250" );
config.addDataSourceProperty( "prepStmtCacheSqlLimit" , "2048" );
ds = new HikariDataSource( config );
}
private DataSource() {}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
여기서 주의할 점은 스태틱블록의 초기화입니다.
HikariConfig는 데이터 소스를 초기화하기 위해 사용되는 설정 클래스입니다.여기에는 사용자 이름, 비밀번호, jdbcUrl 및 dataSourceClassName의 4가지 잘 알려진 필수 파라미터가 포함되어 있습니다.
jdbcUrl 및 dataSourceClassName 중 일반적으로 한 번에 하나씩 사용합니다.다만, 이전 드라이버로 이 속성을 사용하는 경우는, 양쪽 모두의 속성을 설정할 필요가 있습니다.
이러한 속성 외에 다른 풀링 프레임워크에서는 제공되지 않을 수 있는 몇 가지 속성이 있습니다.
- autoCommit
- connectionTimeout
- idleTimeout
- maxLifetime
- connectionTestQuery
- connectionInitSql
- validationTimeout
- maximumPoolSize
- poolName
- allowPoolSuspension
- readOnly
- transactionIsolation
- leakDetectionThreshold
HikariCP는 이러한 데이터베이스 속성 때문에 두드러집니다.심지어 접속 누수를 스스로 감지할 수 있을 정도로 발전되어 있습니다.
위의 속성에 대한 자세한 설명은 여기를 참조하십시오.
리소스 디렉토리에 있는 속성 파일을 사용하여 HikariConfig를 초기화할 수도 있습니다.
private static HikariConfig config = new HikariConfig("datasource.properties" );
속성 파일은 다음과 같습니다.
dataSourceClassName= //TBD
dataSource.user= //TBD
//other properties name should start with dataSource as shown above
또한 java.util을 사용할 수 있습니다.
Properties props = new Properties();
props.setProperty( "dataSourceClassName" , //TBD );
props.setProperty( "dataSource.user" , //TBD );
//setter for other required properties
private static HikariConfig config = new HikariConfig( props );
또는 데이터 소스를 직접 초기화할 수도 있습니다.
ds.setJdbcUrl( //TBD );
ds.setUsername( //TBD );
ds.setPassword( //TBD );
4.2 데이터 소스 사용
이제 데이터 소스를 정의했으므로 데이터 소스를 사용하여 설정된 연결 풀에서 연결을 가져오고 JDBC 관련 작업을 수행할 수 있습니다.
예를 들어 직원 부서의 사용 사례를 시뮬레이션하기 위해 dept와 emp라는 이름의 두 개의 테이블이 있다고 가정합니다.HikariCP를 사용하여 데이터베이스에서 해당 내용을 가져오는 클래스를 작성합니다.
샘플 데이터 작성에 필요한 SQL 문을 다음에 나타냅니다.
create table dept(
deptno numeric,
dname varchar(14),
loc varchar(13),
constraint pk_dept primary key ( deptno )
);
create table emp(
empno numeric,
ename varchar(10),
job varchar(9),
mgr numeric,
hiredate date,
sal numeric,
comm numeric,
deptno numeric,
constraint pk_emp primary key ( empno ),
constraint fk_deptno foreign key ( deptno ) references dept ( deptno )
);
insert into dept values( 10, 'ACCOUNTING', 'NEW YORK' );
insert into dept values( 20, 'RESEARCH', 'DALLAS' );
insert into dept values( 30, 'SALES', 'CHICAGO' );
insert into dept values( 40, 'OPERATIONS', 'BOSTON' );
insert into emp values(
7839, 'KING', 'PRESIDENT', null,
to_date( '17-11-1981' , 'dd-mm-yyyy' ),
7698, null, 10
);
insert into emp values(
7698, 'BLAKE', 'MANAGER', 7839,
to_date( '1-5-1981' , 'dd-mm-yyyy' ),
7782, null, 20
);
insert into emp values(
7782, 'CLARK', 'MANAGER', 7839,
to_date( '9-6-1981' , 'dd-mm-yyyy' ),
7566, null, 30
);
insert into emp values(
7566, 'JONES', 'MANAGER', 7839,
to_date( '2-4-1981' , 'dd-mm-yyyy' ),
7839, null, 40
);
H2와 같은 인메모리 데이터베이스를 사용하는 경우 데이터를 가져오기 위해 실제 코드를 실행하기 전에 데이터베이스 스크립트를 자동으로 로드해야 합니다.다행히 H2에는 실행 시 클래스 경로에서 데이터베이스 스크립트를 로드할 수 있는 INIT 파라미터가 포함되어 있습니다.JDBC URL은 다음과 같습니다.
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;INIT=runscript from 'classpath:/db.sql'
데이터베이스에서 다음 데이터를 가져오는 방법을 만들어야 합니다.
public static List<Employee> fetchData() throws SQLException {
String SQL_QUERY = "select * from emp";
List<Employee> employees = null;
try (Connection con = DataSource.getConnection();
PreparedStatement pst = con.prepareStatement( SQL_QUERY );
ResultSet rs = pst.executeQuery();) {
employees = new ArrayList<>();
Employee employee;
while ( rs.next() ) {
employee = new Employee();
employee.setEmpNo( rs.getInt( "empno" ) );
employee.setEname( rs.getString( "ename" ) );
employee.setJob( rs.getString( "job" ) );
employee.setMgr( rs.getInt( "mgr" ) );
employee.setHiredate( rs.getDate( "hiredate" ) );
employee.setSal( rs.getInt( "sal" ) );
employee.setComm( rs.getInt( "comm" ) );
employee.setDeptno( rs.getInt( "deptno" ) );
employees.add( employee );
}
}
return employees;
}
그리고 JUnit 메서드를 생성하여 테스트해야 합니다.테이블 emp 내의 행 수를 알고 있기 때문에 반환되는 목록의 크기는 행 수와 같아야 합니다.
@Test
public void givenConnection_thenFetchDbData() throws SQLException {
HikariCPDemo.fetchData();
assertEquals( 4, employees.size() );
}
5. 결론
이 간단한 기사에서는 HikariCP를 사용하는 이점과 그 구성에 대해 설명했습니다.
항상 그렇듯이, GitHub에서 전체 소스 코드를 사용할 수 있습니다.
참조
https://www.baeldung.com/hikaricp
'자바' 카테고리의 다른 글
[Spring] @Primary Annotation 사용법 (0) | 2023.03.13 |
---|---|
[MyBatis] Cache(캐시) 관련 문제 - flushCache, useCache (1) | 2023.03.03 |