我有一个连接到 SQL Server 数据库的 Spring boot 应用程序。我需要一些帮助来在我的应用程序中使用缓存。我有一个 CodeCategory 表,其中包含许多代码的代码列表。该表将每月加载一次,并且数据每月仅更改一次。 我想在应用程序启动时缓存整个表。在对该表的任何后续调用中,都应该从此缓存中获取值,而不是调用数据库。
例如,
List<CodeCategory> findAll();
我想在应用程序启动期间缓存上述数据库查询值。如果有像 List<CodeCategory> findByCodeValue(String code)
这样的数据库调用应该从已经缓存的数据中获取代码结果,而不是调用数据库。
请告诉我如何使用 Spring Boot 和 ehcache 来实现这一点。
最佳答案
正如所指出的,ehcache 需要一些时间来设置,并且它不能完全与 @PostConstruct
一起工作。在这种情况下,请使用 ApplicationStartedEvent
加载缓存。
GitHub 存储库:spring-ehcache-demo
@Service
class CodeCategoryService{
@EventListener(classes = ApplicationStartedEvent.class )
public void listenToStart(ApplicationStartedEvent event) {
this.repo.findByCodeValue("100");
}
}
interface CodeCategoryRepository extends JpaRepository<CodeCategory, Long>{
@Cacheable(value = "codeValues")
List<CodeCategory> findByCodeValue(String code);
}
注意:正如其他人指出的那样,有多种方法。您可以根据您的需要进行选择。
关于java - Spring boot应用程序启动时如何缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471247/