当前位置: 首页 > 知识库问答 >
问题:

MongoDB Spring数据存储库-缓存方法

胡锋
2023-03-14

我需要使用spring@Cacheable注释缓存对MongoDB的调用:

public interface SiteRepository extends PagingAndSortingRepository<Site, String>{
    @Cacheable
    List<Site> findByStatus(Site.Status status);
}

不幸的是,使用@Cacheable注释接口中的任何方法都会导致以下异常:

我正在寻找一种方法来缓存对DB的调用(这相当昂贵)。有什么想法吗?

共有1个答案

史良哲
2023-03-14

从缓存上的Spring留档:

Spring建议您只使用@Cache*注释注释具体类(和具体类的方法),而不是注释接口。您当然可以将@Cache*注释放置在接口(或接口方法)上,但这仅适用于您使用基于接口的代理时所期望的情况。Java注释不是从接口继承的事实意味着,如果您使用基于类的代理(proxy-Target et-class="true")或基于编织的方面(mode="aspectj"),那么代理和编织基础架构不会识别缓存设置,并且对象不会包装在缓存代理中,这显然是不好的。

可能您的缓存配置与Spring在运行时创建存储库接口实现的方式发生冲突。

您可以查看缓存配置,使其能够很好地处理spring数据(请参阅此处了解不同的缓存配置选项)。

或者,你可以这样做:

public interface SiteRepository extends PagingAndSortingRepository<Site, String>{
    List<Site> findByStatus(Site.Status status);
}

@Service
public class CachedSiteService {

    @Autowired
    private SiteRepository siteRepository;

    @Cacheable("sites")
    List<Site> findByStatus(Site.Status status) {
        return siteRepository.findByStatus(status);
    }

}
 类似资料:
  • 数据库缓存类允许你把数据库查询结果保存在文本文件中以减少数据库访问。 重要 当缓存启用时,本类会被数据库驱动自动加载,切勿手动加载。 重要 并非所有查询结果都能被缓存,请仔细阅读本页内容。 启用缓存 启用缓存需要三步: 在服务器上创建一个可写的目录以便保存缓存文件; 通过文件 application/config/database.php 中的 cachedir 参数设置其目录路径; 通过将文件

  • 将现有存储库数据库迁移到其他数据库可能包括迁移到同一服务器中的其他数据库,或迁移到不同操作系统上的数据库(例如,从 Windows 到 macOS)。 如果你想迁移你的存储库数据库,请按照下列步骤操作: 通过运行命令,或使用通知区域或菜单栏中的图标来停止 Navicat Monitor 服务。 在你的数据库管理工具中,将当前的存储库数据库(所有表的结构和数据)复制到新的存储库数据库。 启动 Nav

  • 本文向大家介绍android数据存储之文件存储方法,包括了android数据存储之文件存储方法的使用技巧和注意事项,需要的朋友参考一下 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。 概述 文件存取的核心就是输入流和输出流。 Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOu

  • 问题内容: 有人可以告诉我,在以下情况下如何进行? 接收文件(MS文件,ODS,PDF) 通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容 使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ? 检索文档+元数据 我对第3点和第4点感兴趣… 详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+

  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

  • 这根本不是关于Spring靴的。 我的英语可以更好。 使用下面的Spring Data配置,我正在尝试执行DML请求。 恰好是< code>CrudRepository#save方法。 然而,执行Spring的CrudRepository#保存方法,我接下来要做的是: 只有选择由功能记录。 没有执行任何“插入”或“更新”语句来hibernate.show_sql日志记录。 数据库根本没有变化。 =