[오류] Vertica + SpringBoot 연동 오류 (HikariDataSource eror)
개요
Vertica DB로 새롭게 서버를 구축하던 도중, 서버가 기동이 안되길래 오류를 확인해봤더니 HikariDataSource를 못만들고 있었다.
확인해보니 properties를 바인딩하지 못하는 모양. 결론적으로 Driver 버전을 맞춰야 하는 일이었다. 까다로운 Vertica와 SpringBoot를 쓰시는 분들이 나와 같은 문제를 겪지 말라고 남기는 기록.
오류 메세지 & 분석
Description:
Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource:
Property: driverclassname
Value: oracle.jdbc.OracleDriver
Origin: "driverClassName" from property source "source"
Reason: index 1 out of bounds for length 1
Action:
Update your application's configuration
보통 파라미터가 바인딩이 안되면 ' ' 안에 바인딩 실패한 프로퍼티명이 붙기 마련이다.
유저네임이 맞지 않다는 오류 예시
ex ) Failed to bind properties under 'spring.datasource.username' to com.zaxxer.hikari.HikariDataSource:
근데 ' ' 에 프로퍼티를 못 붙이고 Reason도 index 1 out of bounds for lenngth 1 이라니..
index out of bounds를 구글에 검색하면 수 많은 배열 문제만 나온다..
Index 1 out of bounds for length 1 exception을 찾아보던 도중, DBeaver에서 Vertica 연동에 같은 오류가 났다는 사람이 있었다.
- Reason이 같기에 Driver가 문제일 것 같다는 합리적 의심이 드는 순간. 친절한 DBeaver 만세
해결
- 기존 Vertica 버전 확인
select version()
Vertica 11.0 과 11.1 버전. Release 정보를 찾아봤을 때는 엄청난 차이는 없어보였는데..
기존에 쓰던 버전이 11.0.2 버전이었는데, 고객사 서버 구성해주시는 분이 11.1.1로 깔아주셔서 driver 차이가 났었다.
솔직히 driver가 11.0.2 였는데 0.1버전 차이났다고 이렇게 바로 작동 안되겠어 하고 좀 간과했던 부분이었다.
- 버티카 릴리즈 노트 : https://www.vertica.com/docs/ReleaseNotes/11.1.x/Vertica_11.1.x_Release_Notes.htm
- 내 driver 확인 (Vertica는 jdbc를 수동으로 넣어준다. 희귀해서 지원을 안해줌. )
Gradle 파일에서 compile 부분 수정
- before
dependencies {
compile files("libs/vertica-jdbc-11.0.2-0.jar")
compile files("libs/VerticaDialect.jar")
}
- after
dependencies {
if (project.hasProperty("특정 11버전 profile")) {
compile files("libs/vertica-jdbc-11.1.1-0.jar")
}else{
compile files("libs/vertica-jdbc-11.0.2-0.jar")
}
compile files("libs/VerticaDialect.jar")
}
compile 시에 특정 profile로 버전을 구분했다. Gradle의 project는 내장 객체로 각종 빌드 정보가 담겨있다.
package org.gradle.api;
public interface Project extends Comparable<Project>, ExtensionAware, PluginAware {
String DEFAULT_BUILD_FILE = "build.gradle";
String PATH_SEPARATOR = ":";
String DEFAULT_BUILD_DIR_NAME = "build";
String GRADLE_PROPERTIES = "gradle.properties";
String SYSTEM_PROP_PREFIX = "systemProp";
String DEFAULT_VERSION = "unspecified";
String DEFAULT_STATUS = "release";
}
이후 빌드시에
./gradlew clean bootJar -P특정 11버전 profile
이렇게 jar로 묶으면 if문이 발동해서 jar를 구분하여 compile할 수 있다.
결론
앞으로 Vertica는 가급적이면 버전과 딱 맞는 혹은 상위버전의 driver jar를 적재하여 컴파일 할 것 같다. 무슨 변수가 있을 지 모르니..
- vertica 다운로드
참고 : https://www.vertica.com/download/vertica/client-drivers/