Class Almanac
java.lang.Object
io.leandev.appfuse.almanac.Almanac
- All Implemented Interfaces:
AutoCloseable
almanac 服務入口
統一入口,組裝 AlmanacClient 與檔案型快取,並提供三個與上一代
(appfuse-common)等價的領域服務——只是資料來源由「直接連接各原始資料源」
改為「連接 almanac」:
calendar()— 行政機關辦公日曆(工作日 / 假日)location()— 國家 / ISO 代碼與行政區劃轉換address()— 台灣縣市 / 鄉鎮市區 / 村里
快取由消費端注入 CacheManager(必填):almanac 不代建、也不提供任何預設,
由消費端決定持久化位置與生命週期,避免框架靜默落地到揮發性的系統暫存目錄。各領域
服務在注入的 CacheManager 上建立 Ehcache 磁碟層(檔案)為主、極小 heap(byte 計,
相容記憶體預算管制)為輔的快取:字典資料總量大、存取零散,放磁碟可避免記憶體配置過大
或 hit rate 過低;almanac 視為可靠來源,故不啟用雙層快取的 fallback 機制。
快取的記憶體治理(governed / ungoverned)由消費端注入的 CacheManager 決定,almanac 本身保持治理無關。建議為 almanac 注入專屬、ungoverned 的磁碟 CacheManager,與其他 受記憶體預算管制的快取隔離(字典資料以磁碟為主,不宜佔用 heap/offheap 預算)。
使用範例
```java try (CacheManager cacheManager = CacheManagerBuilder.newCacheManager() .ungoverned() .withPersistence(Path.of("/var/cache/almanac")) .build(); Almanac almanac = Almanac.builder() .apiKey("your-almanac-api-key") .cacheManager(cacheManager) .build()) { boolean holiday = almanac.calendar().isHoliday(LocalDate.of(2026, 1, 1)); String iso3 = almanac.location().convertISO2CountryToISO3("TW"); var cities = almanac.address().findAllCities(); } ```- Since:
- 4.0
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Method Summary
-
Field Details
-
DEFAULT_TTL
預設快取存活時間(almanac 資料更新頻率低,預設一天)
-
-
Method Details
-
calendar
-
location
-
address
-
client
-
close
- Specified by:
closein interfaceAutoCloseable- Throws:
Exception
-
builder
-