Как я могу отключить кэш второго уровня некоторых определенных объектов в режиме гибернации без изменения аннотаций
-
06-09-2019 - |
Вопрос
Я использую кэш второго уровня гибернации в своем приложении по определенным деловым причинам Я больше не могу изменять аннотацию объекта.
В моем проекте, помимо изменения базы данных из гибернации, существуют также другие собственные SQL, которые не проходят через гибернацию.Следовательно, данные кэша второго уровня Hibernate могут устареть после обновления базы данных с помощью собственного SQL.Вот почему я хочу чтобы отключить кэш второго уровня для определенных объектов (программно или другим способом, кроме изменения аннотации).
Заранее спасибо!
Решение
ПРЕДУПРЕЖДЕНИЕ: Как отметил Йенс Шаудер, невозможно настроить Ehcache для хранения 0 элементов в памяти, установив maxElementsInMemory="0", поскольку это фактически вызывает противоположный эффект - устанавливает неограниченный размер кэша.Такое поведение не упоминается в Кэширование в режиме гибернации страница, но задокументирована на Конфигурация кэша Страница.
Я быстро просмотрел документацию и пока не нашел альтернативного подхода.Я не могу удалить этот ответ самостоятельно.:-(
Мое первоначальное предложение:
Вы можете настроить поставщика реализации кэша второго уровня на короткое время TTL и / или на хранение 0 записей определенного типа объекта.
Например.если вы используете Ehcache, вы можете настроить его в ehcache.xml:*
<cache
name="com.problematic.cache.EntityName"
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName
overflowToDisk="false" <<== Do not overflow any entries to disk
/>
Видишь Кэширование в режиме гибернации в документации Ehcache.
Другие советы
В Terracotta 3.1 и выше вы можете включать / отключать кэши гибернации 2-го уровня для каждого региона, как в конфигурации (статически), так и во время выполнения, используя консоль разработчика Terracotta.
Вы также можете отслеживать в режиме реального времени статистику кэша и гибернации для отдельных узлов в кластере или в масштабах всего кластера.
Terracotta имеет открытый исходный код.Для получения более подробной информации ознакомьтесь с Терракота для зимней спячки.