Как временно отключить стратегию кеша 2-го уровня только для чтения в Граале?
-
19-09-2019 - |
Вопрос
В моем приложении Grails некоторые из моих доменных классов никогда не будут изменены пользователями.
Тем не менее, иногда необходима некоторые работы по техническому обслуживанию, и администратор должен время от времени создавать/редактировать несколько экземпляров (скажем, два раза в год).
Я хотел бы установить стратегию кэша 2-го уровня только для чтения для этих классов доменов (static mapping = { cache usage: 'read-only' }
) И я хотел бы иметь возможность «отключить» (в очень конкретных ситуациях) стратегию только для чтения, чтобы получить некоторые экземпляры с помощью редактирования каркасов Грааля.
Является ли это возможным? Что вы советуете мне сделать?
РЕДАКТИРОВАТЬ: Решение, которое я реализую, представляет собой смесь ответов Pascal и Burt (см. Комментарии). Оба ответа отличные и полезные. Так что я получил дилемну для выбора принятого ответа! В любом случае, благодарю Вас.
Решение
Это, вероятно, возможно, но, скорее всего, нетривиально. Я бы пошел с прямыми вставками, используя groovy.sql.sql. Вы теряете проверку, но вы можете создавать экземпляры и проверять их, но не вызовать сохранение (). Затем сделайте вставки SQL, если они в порядке, например,
def thing = new Thing(params)
if (thing.validate()) {
new Sql(dataSource).executeInsert(
"insert into thing(name) values(?)", [params.name])
}
else {
// report validation error
}
Другие советы
Я бы выполнил обновленную информацию о данных объектах, использующих чистый SQL а затем сделайте необходимый evict()
метод вызывает SessionFactory
Чтобы удалить конкретные сущности из кэша 2 -го уровня. Обратите внимание, что вам, возможно, придется удалить объекты из коллекций также с evictCollection()
. Анкет Проверь это Хороший пост в блоге Для получения подробной информации о выселении.
Инкапсулировать все это в услуги (например, wipeBooksFromGlobalCache()
), чем администраторы могут позвонить в очень конкретных ситуациях, которые вы упоминаете.