AddressImageCache.ktAddressImageDO (исключая двоичные данные изображений). Обеспечивает быстрый поиск наличия изображения у адреса и его типа.AddressImageCache расширяет AbstractCache — базовый класс ProjectForge для обновляемых кэшей. Фреймворк вызывает refresh() периодически или по требованию, синхронизируя вызовы для предотвращения конкурентных изменений.
Кэш хранит Map<Long, AddressImageDO>, где каждое значение — это облегчённый AddressImageDO, содержащий только:
lastUpdate — временная метка изменения для проверки актуальности кэша.imageType — формат изображения (ImageType.PNG по умолчанию).Двоичные данные исключены — ни preview, ни image массивы байтов не загружаются. Это сохраняет эффективность использования памяти кэшем, одновременно мгновенно отвечая на запросы «есть ли у адреса X изображение?».
refresh() выполняется внутри изолированного контекста персистентности только для чтения (для чистых границ транзакций). Он использует JPQL-запрос, выбирающий addressId, lastUpdate и imageType как проекцию Tuple, атомарно перестраивая всю карту во избежание проблем конкурентного чтения.
getImage(addressId) — единственный публичный API. Он вызывает checkRefresh() (унаследованный от AbstractCache) для проверки актуальности перед поиском в карте. Возврат null означает, что изображение для данного адреса отсутствует.
Объект-компаньон содержит lateinit var instance, устанавливаемый в @PostConstruct, что обеспечивает статический доступ из кода, не использующего внедрение Spring.
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024 -> 2025. 943947aaa Адреса: поддержка gif и jpeg 0ceceb28f Все обновления кэша теперь выполняются в изолированных транзакциях 5989b32fd BaseDao: механизм onChangeLister реорганизован. 1b50060c3 BaseDao: переименовано: get -> find, save -> insert, getList -> select, load -> select