2012-04-08 2 views
3

У меня есть веб-приложение Hibernate + Ehcache + Spring MVC, который устанавливается в довольно стандартным способом:Как использовать/не использовать кеш для каждого запроса?

Controller -> Класс обслуживания -> класс DAO -> DB

приложение является REST API и откликнется для HTTP GET запросов с XML. Все работает так, как ожидалось. БД ударяется только тогда, когда это необходимо, иначе результаты исходят от Ehcache.

Я хотел бы использовать/не использовать кеш для каждого запроса. Я хотел бы, чтобы поведение по умолчанию, конечно, состояло в использовании кеша, но когда передавался параметр «nocache = 1», кеш не должен использоваться, и вместо этого следует читать БД.

Я начал с добавления параметра «useCache» к моим методам класса обслуживания, а затем к классам DAO, но это не понравилось. Есть ли лучший/лучший способ сделать это? Может быть, с сервлет-фильтром?

+0

+1, как вы настраиваете кеш? Hibernate? '@ Cacheable'? –

+0

Я аннотировал классы POJO с помощью @Cache (use = ...). Также я указываю имена кешей в файле ehcache.xml. ' – Thomas

ответ

0

Вот одна идея, но я не уверен, что она правильная.

Напишите 2 метода, один с query.setCacheable(true); и еще один обычный. Теперь, когда вы можете использовать методы в соответствии с вашими потребностями, т.е. когда вам нужно кэшировать, а когда нет.

Адрес article который упоминает о кэше запросов.

+0

То есть (почти) именно тот маршрут, который я начал спускать, но мне не понравилось, как кеширующий материал загрязнил мой код. Я чувствовал, что бизнес-методы в моих классах обслуживания не должны «знать» о кешировании, поэтому я остановился. Все еще интересно, есть ли AOP или фильтр для достижения того, что я хочу ... – Thomas

Смежные вопросы