当前位置: 首页 > article >正文

@Cacheable 注解爆红(不兼容的类型。实际为 java. lang. String‘,需要 ‘boolean‘)

文章目录

  • 1、org.springframework.cache.annotation.Cacheable
  • 2、javax.persistence.Cacheable

在这里插入图片描述

    @Cacheable(value = "findPAUserById", key = "#id")
    public Optional<PAUser> findById(Integer id) {
        return paUserRepository.findById(id);
    }

我真的要笑死,findPAUserById 下面爆红波浪线,我以为是代码的问题,其实是注解导入的不正确,我真是醉了,我要导入的应该是 import org.springframework.cache.annotation.Cacheable;这个注解,结果导成了import javax.persistence.Cacheable;这个注解。


org.springframework.cache.annotation.Cacheablejavax.persistence.Cacheable 这两个注解的区别。

Featureorg.springframework.cache.annotation.Cacheablejavax.persistence.Cacheable
所属框架Spring Framework (Spring Cache Abstraction)Java Persistence API (JPA)
作用声明一个方法的结果可以被缓存。 Spring 会在方法调用时拦截,并检查缓存,返回缓存结果或执行方法。声明一个实体类应该被缓存。 指示 JPA 提供者启用二级缓存。
应用范围方法级别实体类级别 (@Entity)
缓存层级方法级的缓存,通常用于业务逻辑层, 可以缓存方法的返回值。实体类的二级缓存,通常在持久层, 用于缓存实体类的数据。
主要功能声明方法返回值可缓存,并指定缓存名称和键的生成规则。 使用 Spring 的缓存管理器来实际管理缓存。声明实体类可以使用二级缓存。 JPA 提供者可能会使用自己的缓存实现,例如 Ehcache 或其他缓存。
缓存生命周期由 Spring 的缓存管理器管理缓存的生命周期和失效策略。由 JPA 提供者管理二级缓存的生命周期和失效策略。
缓存类型可以搭配多种缓存提供者使用, 例如:内存缓存、Ehcache、Redis、Caffeine 等,并且可以自由切换。由 JPA 提供者决定使用的二级缓存类型,通常与 JPA 提供者相关。
配置方式通过 Spring Boot 的 application.propertiesapplication.yml 配置,以及 Spring 缓存注解 (@EnableCaching, @CacheManager, @CacheConfig等)通过 JPA 提供者的配置文件 (persistence.xml 或其他 JPA 实现的配置) 或者注解,例如 shared-cache-mode
缓存控制@CacheEvict, @CachePut, @Caching 等 Spring 缓存注解可以更精细地控制缓存的更新和删除。通常使用 JPA 的 API 或者配置来管理二级缓存。 可以使用 JPA 的注解 @Cache 或者配置文件中指定缓存模式。
适用场景适用于需要缓存方法结果,以提高性能的应用场景, 例如读取数据,计算结果等。适用于需要缓存实体数据以减少数据库访问的场景。 例如,频繁读取的实体数据。
使用方式@Cacheable(value = "cacheName", key = "#id") 标记一个可以缓存返回值的方法。@Cacheable 标记一个实体可以使用二级缓存。
关键属性value: 指定缓存名称。 key: 指定缓存键,通常使用 SpEL。condition: 表示缓存的条件。 unless: 表示不缓存的条件。通常只使用@Cacheable, 有时会配合 shared-cache-mode使用, 用来指定缓存模式。
是否需要缓存管理器必须 使用 Spring 缓存管理器 (CacheManager) 来管理实际的缓存。通常需要配置 JPA 提供者的二级缓存配置。
例子java @Cacheable(value = "userCache", key = "#id") public User getUserById(int id) { ... }java @Entity @Cacheable public class User { ... }

总结

  • org.springframework.cache.annotation.Cacheable: 用于方法级别的缓存,由 Spring 缓存抽象管理,重点是提高方法调用的性能。
  • javax.persistence.Cacheable: 用于实体级别的缓存,由 JPA 提供者管理,重点是减少数据库的访问,提高数据查询性能。

简而言之, 前者是 Spring Cache 的,用于缓存方法的返回值;后者是 JPA 的,用于缓存实体类数据。 两者从应用范围,使用场景,管理方式上都不同, 不要混淆。

1、org.springframework.cache.annotation.Cacheable

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.springframework.cache.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
    @AliasFor("cacheNames")
    String[] value() default {};

    @AliasFor("value")
    String[] cacheNames() default {};

    String key() default "";

    String keyGenerator() default "";

    String cacheManager() default "";

    String cacheResolver() default "";

    String condition() default "";

    String unless() default "";

    boolean sync() default false;
}

2、javax.persistence.Cacheable

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package javax.persistence;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cacheable {
    boolean value() default true;
}


http://www.kler.cn/a/470557.html

相关文章:

  • 【信息系统项目管理师】第15章:项目风险管理过程详解
  • HTML-多媒体标签
  • Kubernetes Ingress:流量管理的利器
  • 【WPF】使用BitmapImage给Image的Source赋值,并释放原占用资源,避免删除原文件时导致程序崩溃
  • Midjourney 应用:框架总结
  • Qt天气预报系统设计界面布局第四部分右边
  • SQL Server 中 STRING_AGG 函数使用拼接字符串超长处理方法
  • JVM实战—10.MAT的使用和JVM优化总结
  • 机器学习周报-ModernTCN文献阅读
  • 回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测
  • 解决linux自启程序无法在终端输出问题
  • 低空经济应用探索,无人机个性需求组装技术详解
  • 云计算基础,虚拟化原理
  • Java测试开发平台搭建(八) Jenkins
  • 【Linux】RPMSG通讯协议介绍
  • w140体育馆使用预约平台的设计与实现
  • CV-MLLM经典论文解读|OneLLM: One Framework to Align All Modalities with Language
  • netty系列(四)websocket client和server
  • 用CRD定义未来:解锁机器学习平台的无限可能
  • ollama+FastAPI部署后端大模型调用接口
  • 修改 页面 滚动条样式
  • 【React】漫游式引导
  • java开发springoot
  • 【苏德矿高等数学】第1讲:有界函数、无界函数、复合函数
  • DeepSpeed是什么,怎样使用
  • 个性化电影推荐系统|Java|SSM|JSP|