Java应用程序中的Spring缓存实现?



在我的Java应用中,基于Spring Boot我正在尝试为以下服务方法实现缓存机制:

@Override
public List<EmployeeDTO> findAllByCountry(Country country) {
final Map<Pair<UUID, String>, List<CountryTranslatable>> valueList 
= countryRepository...
// code omitted for brevity
}

在关于这个问题的几个例子之后,我决定采用A Guide to Caching in Spring中提到的方法。

然而,我有点困惑,因为它包含Spring和Spring Boot实现,并使用不同的注释示例。我想我应该从3.1开始。使用Spring Boot章节,因为我使用Spring Boot,但我不确定我应该使用哪个缓存注释(4.1)。@Cacheable似乎是可以的,但我不确定)。

那么,我应该把SimpleCacheCustomizer放在哪里?我如何将这种方法应用于上面的服务方法(findAllByCountry)?任何简单的例子,我真的很感激,因为我是新来的春天。

如果您是初学者,则不需要任何自定义,并且您只想要基本的,然后执行以下操作

@Configuration
@EnableCaching
public class CachingConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager();
}
}

所提供的文章指出,return new ConcurrentMapCacheManager("addresses");,但您可以使用默认构造函数,并且稍后将使用@Cacheable("addresses")创建相关的地址缓存。所以不需要在配置中设置这个

你还需要

@Cacheable("employeesList")
@Override
public List<EmployeeDTO> findAllByCountry(Country country) {
final Map<Pair<UUID, String>, List<CountryTranslatable>> valueList 
= countryRepository...
// code omitted for brevity
}

准备好了,这就是基本的设置

如果你想自定义自动配置的缓存管理器,那么只有你应该实现CacheManagerCustomizer接口。

通常情况下,您不需要自定义自动配置的缓存管理器。示例已在您所附的链接中给出。

你对可缓存注释的理解也是正确的,它应该可以很好地为你工作。

可以将该组件类与组件扫描范围中的其他类放在一起。

您应该将SimpleCacheCustomizer与其他Spring配置类放在一起。这样,你的组件将被Spring扫描和加载。

@Component
public class SimpleCacheCustomizer 
implements CacheManagerCustomizer<ConcurrentMapCacheManager> {
@Override
public void customize(ConcurrentMapCacheManager cacheManager) {
cacheManager.setCacheNames(asList("employeesList", "otherCacheName"));
}
}

要在服务中使用缓存,请添加注释@Cacheable("employeesList")

@Cacheable("employeesList")
@Override
public List<EmployeeDTO> findAllByCountry(Country country) {
final Map<Pair<UUID, String>, List<CountryTranslatable>> valueList 
= countryRepository...
// code omitted for brevity
}

如果你想验证缓存是否工作,只需在Spring配置中启用sql_query,并检查findAllByCountry不再向DB发出任何请求。

相关内容

  • 没有找到相关文章

最新更新