-
Avro Gradle Plugin (디폴트 설정)시리즈/Avro 2024. 10. 2. 03:44
Avro가 다양한 언어에서 스키마를 지원 하듯 자바에서도 지원 합니다. 그리고, *.avsc 스키마 파일을 자바 객체로 변환 해주는 플러그인도 존재 하는데요. 이번 포스트에서는 이를 디폴트 설정으로 사용해보는 시간을 가져 보겠습니다.
Java 에서 Avro객체를 생성하는 방법
Avro는 json으로 스키마를 작성하며, 이를 gradle plungin을 통하여 java 객체 생성이 가능합니다.
queryDSL 사용시 Entity를 작성하면 QEntity를 자동으로 만들어 주는 것과 같은 원리로 동작합니다.setting.gradle
// -> 가장 위에 추가 pluginManagement { repositories { gradlePluginPortal() mavenCentral() } } // <- rootProject.name = 'spring-kafka-avro'
avro 스키마 예제
{ "name": "OrderCancelKafkaEvent", "namespace": "com.example.springkafkaavro.common.kafka.model", "type": "record", "fields": [ { "name": "odrderId", "type": "long" } ] }
build.gradle
plugins { id 'java' id 'org.springframework.boot' version '3.3.4' id 'io.spring.dependency-management' version '1.1.6' // avro gradle plugin id "com.github.davidmc24.gradle.plugin.avro" version "1.9.1" } group = 'com.example' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // kafka implementation 'org.springframework.kafka:spring-kafka' // avro implementation "org.apache.avro:avro:1.12.0" compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testImplementation 'org.springframework.kafka:spring-kafka-test' } tasks.named('test') { useJUnitPlatform() } // avro avro{ outputCharacterEncoding = "UTF-8" }
avsc 파일의 위치와 변환하는 방법
com.github.davidmc24.gradle.plugin.avro 가 *.avsc 파일을 읽는 위치는 디폴트로 src/avro가 지정 되어 있습니다.
해당 위치에 avsc 파일을 작성하고./gradlw build
을 수행하면
다음처럼 avsc -> java 자동으로 변환 됩니다.Ref
'시리즈 > Avro' 카테고리의 다른 글
Avro Gradle source, outputDir (사용자 지정) (0) 2024.10.02 Avro VS JSON (2) 2024.10.02 Avro 란? (0) 2024.10.02 댓글