복붙노트

[SPRING] 스프링 데이터 JPA CRUDRepository에 캐시 기능을 추가하는 방법

SPRING

스프링 데이터 JPA CRUDRepository에 캐시 기능을 추가하는 방법

findOne 메소드에 "Cacheable"주석을 추가하고 삭제 또는 발생 된 메소드가 발생할 때 캐시를 제거하려고합니다.

어떻게해야합니까?

해결법

  1. ==============================

    1.virsir, Spring Data JPA (단지 인터페이스 사용)를 사용하면 또 다른 방법이 있습니다. 여기 비슷한 구조의 개체에 대한 genereic dao :

    virsir, Spring Data JPA (단지 인터페이스 사용)를 사용하면 또 다른 방법이 있습니다. 여기 비슷한 구조의 개체에 대한 genereic dao :

    public interface CachingDao<T, ID extends Serializable> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> {
    
    @Cacheable(value = "myCache")
    T findOne(ID id);
    
    @Cacheable(value = "myCache")
    List<T> findAll();
    
    @Cacheable(value = "myCache")
    Page<T> findAll(Pageable pageable);
    
    ....
    
    @CacheEvict(value = "myCache", allEntries = true)
    <S extends T> S save(S entity);
    
    ....
    
    @CacheEvict(value = "myCache", allEntries = true)
    void delete(ID id);
    }
    
  2. ==============================

    2.기본적으로 @ 7의 대답은 정확하지만 2 개의 누락 점이 있다고 생각합니다.

    기본적으로 @ 7의 대답은 정확하지만 2 개의 누락 점이 있다고 생각합니다.

    참고

  3. ==============================

    3.나는 다음과 같은 방식으로이 문제를 해결했다.

    나는 다음과 같은 방식으로이 문제를 해결했다.

    public interface BookRepositoryCustom {
    
        Book findOne(Long id);
    
    }
    
    public class BookRepositoryImpl extends SimpleJpaRepository<Book,Long> implements BookRepositoryCustom {
    
        @Inject
        public BookRepositoryImpl(EntityManager entityManager) {
            super(Book.class, entityManager);
        }
    
        @Cacheable(value = "books", key = "#id")
        public Book findOne(Long id) {
            return super.findOne(id);
        }
    
    }
    
    public interface BookRepository extends JpaRepository<Book,Long>, BookRepositoryCustom {
    
    }
    
  4. ==============================

    4.모든 리포지토리에 사용자 지정 동작 추가하기에서 설명한대로 MyCRUDRepository (인터페이스 및 구현)를 제공하십시오. 그런 다음 이러한 메소드에 대한 주석을 재정의하고 추가 할 수 있습니다.

    모든 리포지토리에 사용자 지정 동작 추가하기에서 설명한대로 MyCRUDRepository (인터페이스 및 구현)를 제공하십시오. 그런 다음 이러한 메소드에 대한 주석을 재정의하고 추가 할 수 있습니다.

    findOne(ID id)
    delete(T entity)
    delete(Iterable<? extends T> entities)
    deleteAll() 
    delete(ID id) 
    
  5. from https://stackoverflow.com/questions/13914480/how-to-add-cache-feature-in-spring-data-jpa-crudrepository by cc-by-sa and MIT license