有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如果我有@EnableCaching,为什么没有CacheManager缓存就不能工作?

我正在学习缓存,文章说,thay@EnableCaching足以让Spring自动创建一个简单的缓存管理器。 但是如果我对一个方法做一个简单的测试,就会弹出异常

方法

    @Cacheable("example")
public DishResponseDTO getOne(int dishId) {
    var dish = dishRepository.findById(dishId)
            .orElseThrow(() -> new EntityNotFoundException(dishtErrorMessage(dishId)));
    return DishMapper.toDishResponseDTO(dish);
}

试验

    @Test
@Transactional
public void get() {
    System.out.println(dishService.getOne(1));
    System.out.println(dishService.getOne(2));
    System.out.println(dishService.getOne(1));
}

例外情况:

java.lang.IllegalArgumentException: Cannot find cache named 'example' for Builder[public com.topjava.graduation.restaurant.dto.DishResponseDTO com.topjava.graduation.restaurant.service.DishService.getOne(int)] caches=[example] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'

当我添加一个简单的缓存管理器时,异常消失,一切正常

@EnableCaching
@Configuration
public class CacheConfig {
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        List<Cache> caches = new ArrayList<Cache>();
        caches.add(new ConcurrentMapCache("dto"));
        cacheManager.setCaches(caches);
        return cacheManager;
    }
}
}

如果我删除@EnableCaching,则不会有任何更改。因此,问题是如果没有创建简单的缓存管理器,@EnableCaching注释的意义是什么


共 (0) 个答案