티스토리 뷰
spring boot 프로젝트에 influxdb 를 연동해야 했다.
spring boot 프로젝트는 java 언어로 작성되어 있었으며, build 툴은 gradle 이었다.
이미 spring boot 프로젝트에 influxdb-client-java, flux-dsl 라이브러리가 설치되어 있었고, 큰 문제 없이 사용하고 있었다.
그런데 기능을 추가하면서 필요한 기능이 생겼고, 해당 기능을 사용하려니, flux-dsl 의 버전이 낮아 기능을 제공하지 않았다.
그래서 기존 4.xx -> 6.5.0 으로 변경했다.
implementation 'com.influxdb:influxdb-client-java:6.5.0'
// https://mvnrepository.com/artifact/com.influxdb/flux-dsl
implementation "com.influxdb:flux-dsl:6.5.0"
문제 발생
여기서 아래와 같은 에러가 발생하였다.
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
문제 원인
해당 에러는 influxdb-client-java 라이브러리에서 제공하는 InfluxDBClientFactory.create 를 이용해,InfluxDBClient 를 생성할 때 발생하였다.
{
...
InfluxDBClient client = InfluxDBClientFactory.create(url, token, org, bucket);
...
}
정확한 문제를 찾기 위해, InfluxDBClientFactory.create 메서드를 타고 들어갔고, 원인을 알 수 있었다.
InfluxDBClientFactory를 이용해 InfluxDBClient 생성할 경우,InfluxDBClientOptions를 생성하게 되는데, InfluxDBClientOptions에서 okhttp3 라이브러리를 이용하게 된다.
이 라이브러리에서 사용하는 클래스들 중에는 Kotlin으로 작성된 클래스도 있는데, Influxdb 라이브러리가 결과적으로 kotlin 클래스를 사용하게 되는 것이다.
그런데, 현재 프로젝트가 kotlin 클래스를 빌드할 수 없기 때문에 위와 같은 에러가 발생한 것이다.
(모든 건 로그에 잘 나와있었지만, 인지하지 못했다...)
해결방법
kotlin 클래스도 빌드할 수 있게 만들어 주면 된다.
아래와 같이, "kotlin-stdlib" 를 dependency에 추가해주면 정상적으로 동작된다.
※ 에러 발생 후, 에러 원인과 해결방법까지 찾는데 많은 시간이 소요됐지만, 의외로 해결방법은 간단했다...ㅎ
로그를 꼼꼼히 본다고 했는데, 왜 인지하지 못했는지.... 이 기회를 발판 삼아 로그를 더 잘 봐야겠다는 생각이 든다.
influxdb 라이브러리 관련 docs
https://github.com/influxdata/influxdb-client-java/tree/master/client
https://github.com/influxdata/influxdb-client-java/tree/master/flux-dsl
'influxdb' 카테고리의 다른 글
[influxdb] token 확인하기 (0) | 2022.12.06 |
---|---|
[flux-dsl] flux-dsl을 이용하여 influxdb query 처리하기 (0) | 2022.05.27 |
[influxdb] influxd 의 config 파일 설정 (0) | 2022.05.24 |
[influxdb2.1] measurement, tag key, tag value 조회 (0) | 2022.01.26 |
[influxdb] API 를 이용하여 influxDB 접근 방법 (0) | 2022.01.14 |