Để sử dụng Avro trong dự án Maven, bạn cần thêm dependency sau vào file pom.xml:``` <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> 1.7.7
Thêm plugin build cho Avro vào phần `<build>` của file pom.xml:```
<build>
<plugins>
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.7.7</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>protocol</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
Tạo tệp JSON chứa schema dữ liệu và đặt nó vào thư mục ${project.basedir}/src/main/avro/:```
{
"namespace": "user_machine_learning",
"type": "record",
"name": "Product",
"fields": [
{"name": "productId", "type": "string", "default": "null"},
{"name": "companyName", "type": "string", "default": "null"},
{"name": "productInfo", "type": "string", "default": "null"},
{"name": "direction", "type": "string", "default": "null"}
]
}
Sau khi cấu hình xong, chạy `mvn install` để tạo các lớp Java từ schema. Các lớp này sẽ được tạo ra trong thư mục `${project.basedir}/src/main/java/`.Việc tiếp theo là sử dụng các lớp này để thực hiện serialize và deserialize dữ liệu:```
public class AvroTest {
public static void main(String[] args) throws IOException {
// Serialize
Product product = Product.newBuilder()
.setProductId("1")
.setCompanyName("Đây là một thử nghiệm")
.setProductInfo("Thông tin chi tiết về thử nghiệm")
.setDirection("1")
.build();
File file = new File("/Users/niutao/Desktop/avro_test/user.avro");
DatumWriter<Product> writer = new SpecificDatumWriter<>(Product.class);
DataFileWriter<Product> dataFileWriter = new DataFileWriter<>(writer);
dataFileWriter.create(Product.getClassSchema(), file);
dataFileWriter.append(product);
dataFileWriter.close();
// Deserialize
DatumReader<Product> reader = new SpecificDatumReader<>(Product.class);
DataFileReader<Product> dataFileReader = new DataFileReader<>(file, reader);
Product deserializedProduct = null;
while (dataFileReader.hasNext()) {
deserializedProduct = dataFileReader.next();
System.out.println(deserializedProduct);
}
}
}