Spring Boot 2.X - объединение RedisHa sh с кэшируемым - PullRequest
0 голосов
/ 15 апреля 2020

Итак, я пытаюсь использовать простой сценарий, когда всякий раз, когда происходит откат Hystrix, в моем проекте шлюза шлюз будет пытаться получить данные из базы данных Redis.

По этой причине я импортировал

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

в pom моего микросервиса (скажем, GROUPS-MICROSERVICE) и аннотировал приложение Spring Boot с помощью @ EnableRedisRepositories . Затем я создал один репозиторий (скажем, GroupRedisRepository), который расширяет класс CrudRepository следующим образом

@Repository
public interface GroupRedisRepository extends CrudRepository<GroupDto,String> {

} 

Макет GroupDto выглядит следующим образом

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@RedisHash("group")
public class GroupDto implements Serializable {

    @Id
    private String name;

    **Couple of more variables**
}

Поскольку я планирую использовать репозиторий только для findAll () или findById () я подумал об использовании аннотации @ Cacheable для населения RedisCache, поэтому я импортировал соответствующую зависимость

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

с помощью кэширования через @ EnableCaching Аннотация и аннотированный мой метод обслуживания, такой как

    @Cacheable(value = "group")
    public GroupDto getByName(String name){
        return groupComponent.getByName(name);
    }

Краткое примечание: вызываемый выше groupComponent является просто репозиторием JPA и не имеет никакого отношения к Redis.

Проблема

Когда я вызываю мой метод уровня обслуживания (который аннотируется с помощью Cacheable), значения сохраняются, как и ожидалось, но когда я использую компонент GroupRedisRepository.findAll () ничего не показывает. Я попытался сохранить пользовательский объект напрямую через CrudRepository, и он работал как положено. Обе функции работают как положено, но не в обычном режиме.

Вопрос

Кажется, что Cacheable обрабатывает вещи по-своему, не принимая во внимание аннотацию RedisHa sh. Это означает, что когда что-то хранится в базе данных Redis через @Cacheable, оно отличается по формату от того, что хранится с помощью RedisRepository. Как кто-то может "syn c" эти 2 формата? Как заставить Cacheable использовать формат, определенный аннотацией @ RediHa sh?

Примечание : Все конфигурации обрабатываются классом AutoConfiguration и нашим application.yaml.

Заранее спасибо

...