最新的Avro編譯器(1.8.2)爲基於Joda-Time的實現生成dates logical types的java源代碼。如何配置Avro編譯器來生成使用Java 8日期時間API的源代碼?Avro與Java 8的日期爲邏輯類型
3
A
回答
1
目前(1.8.2的Avro),這是不可能的。生成喬達日期/時間類是硬編碼的。
當前master
分支已經切換到Java 8並且有一個open issue(與Pull Request)添加與java.time.*
類型來生成類的能力。
不幸的是,我不知道任何目前在master
中的任何發佈計劃。如果您覺得冒險,您可以將修補程序應用於1.8.2
,因爲理論上它應該都是兼容的。序列化/反序列化時的底層基類型仍然是整數和長整數。
0
您需要創建自己的Conversion s到支持java-8日期時API,下面是java.time.LocalDate
轉換:
class Java8LocalDateConversion extends Conversion<LocalDate> {
@Override
public Class<LocalDate> getConvertedType() {
return LocalDate.class;
}
@Override
public String getLogicalTypeName() {
// v--- reuse the logical type `date`
return "date";
}
@Override
// convert LocalDate to Integer
public Integer toInt(LocalDate value, Schema schema, LogicalType type) {
return (int) value.toEpochDay();
}
@Override
// parse LocalDate from Integer
public LocalDate fromInt(Integer value, Schema schema, LogicalType type) {
return LocalDate.ofEpochDay(value);
}
}
的邏輯類型可以在Avro中被重複使用,這樣你就可以使用現有date
邏輯類型,例如:
Schema schema = LogicalTypes.date().addToSchema(Schema.create(Type.INT));
對於序列化&反序列化,你應該設置GenericData
將找到自己的轉換,例如:
//serializing
DatumWriter<T> out = new SpecificDatumWriter<>(schema, data());
// deserializing
DatumReader<T> in = new SpecificDatumReader<>(schema, schema, data());
private SpecificData data() {
SpecificData it = new SpecificData();
it.addLogicalTypeConversion(new Java8LocalDateConversion());
return it;
}
如果你不想每次都配置GenericData
,您可以使用全局GenericData
代替,例如:
// register the conversion globally ---v
SpecificData.get().addLogicalTypeConversion(new Java8LocalDateConversion());
相關問題
- 1. Kaa - Avro邏輯類型
- 2. Avro 1.8.2 BigDecimal(邏輯類型)的Java代碼生成
- 3. 條件IF與日期字段類型的邏輯
- 4. Java日曆日期邏輯錯誤
- 5. Java日期實用程序邏輯
- 6. Excel中的日期邏輯
- 7. 如何在Avro IDL中使用邏輯類型?
- 8. 如何將java日期類型存儲爲mysql日期類型?
- 9. ColdFusion的日期邏輯
- 10. [PHP]:邏輯與日期差異
- 11. 如果其他邏輯與空日期
- 12. 邏輯在SQL查詢日期爲MySQL
- 13. 發佈日期發票日期邏輯
- 14. Java 8日期API與日曆/日期/日期格式
- 15. 爲UIPickerView生成日期邏輯
- 16. Java邏輯XOR(「^」)與邏輯NOT(「!」)
- 17. 日期邏輯在Excel 2013
- 18. Rails 3.2:Ruby日期邏輯
- 19. 日期邏輯謎題:在上午8點
- 20. 與日期爲編輯
- 21. 驗證的Java 8日期
- 22. Jquery:條件類型邏輯
- 23. 需要JavaScript的日期邏輯
- 24. 截止到Cognos的日期邏輯
- 25. 具有日期功能的邏輯
- 26. korn shell中的測試日期邏輯
- 27. 有關日期在PHP中的邏輯
- 28. 什麼類型用於Java 8 bean日期屬性 - Instant或ZoneDateTime?
- 29. 將LocalTime(Java 8)轉換爲日期
- 30. java中的人性化日期邏輯函數庫
這裏是我寫在[github]上的測試(https://github.com/holi-java/api-tests/blob/6d09966f007bd6ea6089a5f638275ae0ff5b2a67/avro/src/test/java/test/avro/AvroTypesTest.java# L51_L55)。 –
它不能解決問題:avro編譯器仍然爲這種邏輯類型生成joda的日期字段。 – injecto