Spring кэшируемая аннотация с несколькими ключами - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть 2 способа поиска записи о клиенте (код ниже), customerGuid и customerId - это два разных поля в объекте Customer.

Предположим, что я разыскиваю customer по customerId, есть ли способ для меняпоиск клиента по guid напрямую из кеша без запроса к бэкэнду. Предполагается, что оба метода возвращают тип Customer.

public class CustomerLookup {
    @Cacheable("customerCache")
    public Customer getCustomerByGuid(final String customerGuid) {
        // some implementation here...
    }

    @Cacheable("customerCache")
    public Customer getCustomerByCustId(final String customerId) {
        // some implementation here...
    }
}

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете добавить 2-й параметр к одному методу, который будет служить только ключом кеша.Пример использования customerId в качестве ключа и действуйте следующим образом:

@Service
public class CustomerLookup {
   @Autowired
   @Lazy
   private CustomerLookup self;

   @CachePut("customerCache", key="#customerId")
   public Customer getCustomerByGuid(final String customerGuid, String customerId) {
     Customer customer = self.getCustomerByCustId(final String customerId);
     //......
   }
}

Обратите внимание на самоинжекцию CustomerLookup, если вы этого не сделаете, то кеш не будет работать при вызове getCustomerByCustId(final String customerId)метод в getCustomerByGuid.Также обратите внимание на @CachePut вместо @Cacheable на getCustomerByGuid, при этом вы уверены, что этот метод будет вызываться каждый раз.

...