Использование ehcache 3 с аннотациями Spring (без использования Spring Boot)

Я пытаюсь заставить Ehcache 3 работать со Spring 4 без использования загрузки Spring.

Вот рабочий пример, который использует Spring Boot, но Я работаю над существующим приложением, которое не использует Spring Boot.

Проблема в том, что Spring-context-support (который добавляет аннотации кеша Spring) ожидает, что CacheManager Ehcache будет находиться в этом пути к классам: net.sf.ehcache.CacheManager

Однако в Ehcache 3 класс CacheManager находится в другом пути к классам: org.ehcache.CacheManager.

Итак, в основном Spring-context-support не поддерживает Ehcache 3. И вам придется использовать аннотации JSR-107 напрямую, а не аннотации, предоставляемые Spring.

Но, видимо, он работает с Spring Boot. Возможно, есть способ заставить его работать и со стандартным приложением Spring. Я на это надеюсь. Я действительно хочу использовать собственные аннотации Spring вместо аннотаций JSR-107.


person Håvard Geithus    schedule 08.09.2016    source источник
comment
Используйте правильную версию ehcahce 3, которая поддерживается.   -  person M. Deinum    schedule 08.09.2016
comment
Что это? Спасибо!   -  person Håvard Geithus    schedule 08.09.2016
comment
Просто перечитай снова. При использовании ehcache3 вы должны использовать абстракцию jcache с Spring (вы все равно можете использовать аннотацию spring, но для конфигурации вам нужно использовать фабрики jcache). В противном случае используйте ehcache2. Прошу прощения за мою ошибку.   -  person M. Deinum    schedule 08.09.2016
comment
Спасибо! Я попробую это. Позже я дам вам знать, как это происходит.   -  person Håvard Geithus    schedule 08.09.2016
comment
Интересно, откуда у вас ссылка на статью? Его по-прежнему можно получить из ehcache.org/blog, но, похоже, есть разница в "дате" в URL по какой-то причине ...   -  person Louis Jacomet    schedule 09.09.2016
comment
@LouisJacomet Я получил ссылку на статью из поиска в Google два дня назад (7 сентября). Затем, когда я получил к нему доступ на следующий день, он был сломан. (Дважды проверил историю моего браузера)   -  person Håvard Geithus    schedule 09.09.2016


Ответы (2)


Действительно, в Spring Caching нет встроенной поддержки Ehcache 3.

Хорошая новость заключается в том, что вы добиваетесь желаемого с помощью Поддержка JCache, которую Spring Caching имеет с тех пор, как Ehcache 3 является совместимая реализация JCache. И если у вас есть JCache CacheManager, доступный в контексте вашего приложения, ничто не заставляет вас использовать аннотации JCache. Вы можете продолжать использовать Spring Caching без каких-либо проблем.

Вы можете найти демонстрацию этого здесь.

Примечание: я работаю над Ehcache

person Louis Jacomet    schedule 09.09.2016
comment
Спасибо, что прояснили ситуацию, этот разговор был действительно полезным! Одна из вещей, которые я сделал неправильно в своей настройке, заключалась в том, что набирал свои кеши в моей конфигурации Ehcache 3. Затем, когда Spring JCacheCacheManager вызвал getCache (cacheName) в базовом CacheManager (в моем случае Eh107CacheManager), он закончил тем, что выбросил IllegalArgumentException: Cache [cacheName] определяет типы ключа / значения. Используйте getCache (String, Class, Class). - person Håvard Geithus; 09.09.2016
comment
+1, я также столкнулся с этой проблемой, я думаю, что это ошибка (или, возможно, не поддерживаемая функция), которая использует Ehcache3.x в Spring, мы не можем определить свойство типа ключа и типа значения в ehcache.xml - person Rocky Hu; 02.12.2016
comment
Можно ли использовать Ehcache3 с Spring ACL? - person Sharadr; 02.03.2018
comment
@Sharadr вы пробовали с весенним ACL? Это сработало? - person Thirumal; 24.02.2020

Это простой и рабочий пример для всех необходимых изменений с ehcache 2 на 3: https://imhoratiu.wordpress.com/2017/01/26/spring-4-with-ehcache-3-how-to/

Это ссылка для новой конфигурации:

person Grigory Kislin    schedule 29.11.2017