Я пытаюсь реализовать реплицированный кеш в распределенном приложении, управляемом Spring, с помощью activemq (jms). Несколько экземпляров сервера приложений должны обновить свою копию кеша, когда один из них инициирует изменение. Я пытаюсь реализовать отдельное приложение, чтобы имитировать это.
У меня есть приложение для весенней загрузки, которое использует CrudRepository весенних данных. Я включил кеширование, добавив аннотации @Cacheable.
@RepositoryRestResource
public interface PersonRepository extends CrudRepository<Person,Long>{
@Cacheable(value = "myCache")
List<Person> findAll();
@Override
@CacheEvict(value = "myCache", allEntries=true)
Person save(Person p);
}
Как я могу обновить этот кеш, которым управляет весна, с помощью некоторого настраиваемого кода? Есть два события, когда требуется обновление
Когда вызывается метод сохранения, я хотел бы выполнить код производителя jms, чтобы подтолкнуть объект java (Person) к теме jms. Как я могу добавить настраиваемое поведение для вызова кода производителя jms после сохранения объекта java в методе сохранения?
Обновите кеш (myCache) в коде потребителя jms. Как я могу получить дескриптор этого кеша в репозитории данных Spring, внешнем по отношению к этому интерфейсу, для этого?
Спасибо.
Мы создаем собственную структуру кеширования, чтобы иметь точный контроль над ней. Мы пробовали некоторые из популярных, таких как JBoss TreeCache, но они оказались для нас неудачными. Даже если использовать другую интеграцию кеширования, как мне перехватить вызовы репозитория данных Spring?
Вы не должны. Вам следует интегрироваться со своим поставщиком постоянства. Вызов сохранения не является обязательным, что если кто-то использует аннотацию @Modifying на @Query для определения обновления. Вы можете попробовать и сказать всем, чтобы они также поместили на него @CacheEvict и т. д., Но это не удастся. Вам нужна лучшая интеграция. Поэтому, если вам что-то нужно, вам нужно реализовать кэширование на уровне поставщика сохраняемости, а не использовать абстракцию кэширования Springs. Для этого реализуйте соответствующие интерфейсы и соответствующим образом настройте провайдера.




Не используйте для этого
@Cacheable. Вместо этого используйте правильную интеграцию кеширования для вашего поставщика сохраняемости (возможно, в спящем режиме). Также зачем реализовывать собственное кеширование, есть несколько проверенных решений.