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

@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;
}

相关文章:

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

文章目录 1、org.springframework.cache.annotation.Cacheable2、javax.persistence.Cacheable Cacheable(value "findPAUserById", key "#id")public Optional<PAUser> findById(Integer id) {return paUserRepository.findById(id);}我真的要笑死…...

java相互加密解密

java代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64;public class AesUtils {public static String encrypt(String plaintext, String key, String iv) throws Exception {C…...

PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置

在PostgreSQL中&#xff0c;FIRST_VALUE、LAST_VALUE、LAG 和 LEAD 是窗口函数&#xff08;window functions&#xff09;&#xff0c;它们允许你在数据集的特定窗口&#xff08;或分区&#xff09;内访问行的相对位置。以下是对这些函数的详细解释和用法&#xff1a; 1. FIRS…...

树莓派之旅-第一天 系统的烧录和设置

自言自语&#xff1a; 在此记录一下树莓派的玩法。以后有钱了买点来玩啊草 系统的安装烧录 系统下载 树莓派官网&#xff1a;https://www.raspberrypi.com/ 首页点击SoftWare进入OS下载页面 这里是安装工具&#xff1a;安装工具负责将系统镜像安装到sd卡中 点击下载符合自己…...

数据库工程师进阶秘籍:云计算基础知识题目精选与答案(附PDF)

【单选题】1、将基础设施作为服务的云计算服务类型是&#xff08;&#xff09;。 A. IaaS B. PaaS C. SaaS D. 以上都不是 正确答案&#xff1a;A 答案解析&#xff1a;本题考查云计算的服务类型。基础设施即服务IaaS&#xff08;Infrastructure as a Service&#xff09;&…...

【HAProxy】如何在Ubuntu下配置HAProxy服务器

HAProxy 是一款免费、开源且强大的反向代理程序&#xff0c;它为 HTTP 和 TCP 基础的应用提供了高可用性、负载均衡以及代理功能&#xff0c;因此对于管理高流量服务器&#xff08;或 Web 应用&#xff09;来说&#xff0c;通过将负载分散到多个节点服务器上&#xff0c;它是一…...

C#编写的盘符图标修改器 - 开源研究系列文章

这天在网上遇到一个Windows的盘符图标修改软件&#xff0c;但是它那个是.net framework 2.0的&#xff0c;所以就将其改成4.8.1的了&#xff0c;用于Windows 11等默认不安装2.0库的操作系统里使用。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 它直接进行注册表的修改…...

(四)配置有线网口、SSH登陆、文件传输以及运行交叉编译程序测试

文章目录 配置有线网口原因自动分配不行第一步 设置前先停止网络接口第二步 手动分配ip第三步 使配置的网口ip永久生效第四步 测试一下网络是否通了 SSH登陆文件传输以及运行交叉编译程序测试第一种借助基于SSH的命令行工具SCP传输文件第二种借助基于MobaXterm 软件直接上传测试…...

离线的方式:往Maven的本地仓库里安装依赖

jar文件及源码的绝对路径&#xff0c;gav坐标&#xff0c;打包方式&#xff0c;Maven本地仓库的路径 mvn install:install-file ^-DfileD:\hello-spring-boot-starter-1.0-SNAPSHOT.jar ^-DsourcesD:\hello-spring-boot-starter-1.0-SNAPSHOT-sources.jar ^-DgroupIdcom.examp…...

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(22):密钥协商算法

《深入浅出HTTPS​​​​​​​​​​》读书笔记&#xff08;22&#xff09;&#xff1a;密钥协商算法 密钥的管理和分配是个难题&#xff0c;尤其是生成一个动态密钥更难&#xff0c;而密钥协商算法就可以解决密钥分配、存储、传输等问题。 在网络通信中&#xff0c;为了加密…...

kubernetes学习-Service

kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…...

Springcloud项目-前后端联调(一)

项目采用SpringCloud整体构建&#xff0c;nacos作为注册中心&#xff0c;Mysql和Redis进行数据存储&#xff0c;整体项目类似于平时使用的出行APP,idea2023编写后端&#xff0c;vscode编写前端 后端代码先前已经编写完毕 这部分功能主要是通过前端输入出发地和目的地之后调用…...

洛谷P1525 [NOIP2010 提高组] 关押罪犯(种子并查集基础)

题目链接:P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 题目难度:普及+/提高 题目描述: S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N,有m对罪犯,每对之间有仇恨值,问如何分配罪犯使得现 Z 市长要看到其中最大的矛盾值最小。 输入格…...

【算法刷题指南】模拟

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…...

学习笔记078——Java Properties类使用详解

文章目录 概述常见方法写入读取遍历 概述 Properties 继承于 Hashtable。表示一个持久的属性集&#xff0c;属性列表以key-value的形式存在&#xff0c;key和value都是字符串。 Properties 类被许多Java类使用。例如&#xff0c;在获取环境变量时它就作为System.getPropertie…...

若依使用 Undertow 替代 Tomcat 容器

文章目录 需求提出应用场景解决思路注意事项完整代码第一步&#xff1a;在 ruoyi-framework/pom.xml 文件中进行依赖配置第二步&#xff1a;修改 application.yml 配置文件第三步&#xff1a;修改文件上传工具类 FileUploadUtils.java 运行结果 需求提出 在开发若依框架的前后…...

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测

多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…...

Elasticsearch:基础概念

一、什么是Elasticsearch Elasticsearch是基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产规模工作负载的速度和相关性进行了优化。使用 Elasticsearch 可以近乎实时地搜索、索引、存储和分析各种形状和大小的数据。Elasticsearch 是…...

Spring MVC的@ResponseBody与@RequestBody

ResponseBody注解用于将Controller的方法返回的对象&#xff0c;通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如&#xff1a;json,xml等&#xff0c;通过Response响应给客户端。 RequestBody注解用于读取http请求的内容(字符串)&#xff0c;通过springmv…...

智能商业分析 Quick BI

Quick BI 是阿里云提供的一款智能商业分析&#xff08;BI&#xff09;工具&#xff0c;旨在帮助企业快速获取业务洞察、优化决策过程、提升数据分析效率。通过强大的数据可视化和分析功能&#xff0c;Quick BI 能够帮助用户轻松连接多种数据源、创建多维度的报表和仪表盘&#…...

终极macOS清理神器:Pearcleaner 3步彻底卸载应用不留痕迹

终极macOS清理神器&#xff1a;Pearcleaner 3步彻底卸载应用不留痕迹 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾将macOS应用拖入废纸篓后&…...

手把手教你给STM32MP157开发板接上HDMI显示器(基于Sii9022A芯片与设备树配置)

STM32MP157开发板HDMI显示实战&#xff1a;从硬件连接到设备树配置全解析 引言 当你第一次拿到STM32MP157开发板时&#xff0c;最令人兴奋的莫过于看到图形界面在屏幕上亮起的那一刻。但现实往往很骨感——手头可能没有配套的LCD屏幕&#xff0c;而HDMI显示器却是大多数开发者桌…...

基于AI智能体的渗透测试框架:从自动化到智能协同的范式转变

1. 项目概述&#xff1a;一个面向渗透测试的智能体框架最近在整理自己的工具链时&#xff0c;发现了一个挺有意思的项目&#xff0c;叫GH05TCREW/pentestagent。乍一看这个名字&#xff0c;你可能会觉得这又是一个“缝合怪”式的自动化渗透工具&#xff0c;把Nmap、SQLmap之类的…...

3DS游戏格式转换神器:5分钟让.3ds文件变身为可安装的CIA

3DS游戏格式转换神器&#xff1a;5分钟让.3ds文件变身为可安装的CIA 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 还在为…...

深入Transformer内部:LoRA到底改动了哪部分权重才让模型“学会”新任务?

深入Transformer内部&#xff1a;LoRA如何通过低秩更新重塑大模型能力 在自然语言处理领域&#xff0c;大型预训练模型的微调一直是个计算密集型任务。传统全参数微调需要更新数十亿甚至数千亿参数&#xff0c;这对大多数研究者和企业来说都是难以承受的负担。低秩适应(LoRA)技…...

All in Token,移动,电信,联通,百度,阿里,字节,华为,Token战争,Token无用:李彦宏用DAA终结了AI的度量衡之争

今年4月&#xff0c;AI行业出现了一组让投资人坐立难安的数据&#xff1a;Anthropic年化营收突破300亿美元&#xff0c;正式超过OpenAI的约250亿美元。但反常的是&#xff0c;据第三方机构估算&#xff0c;Claude的月活用户仅约为ChatGPT的2.44%。以及&#xff0c;Anthropic的模…...

从零打造会“看”的电子眼:Teensy与OLED的嵌入式图形与传感器实践

1. 项目概述&#xff1a;打造一个会“看”的电子生命体几年前&#xff0c;我第一次在创客社区看到“Uncanny Eyes”项目时就被深深吸引了。一个微小的OLED屏幕&#xff0c;在代码驱动下&#xff0c;竟然能呈现出如此逼真、灵动的眼球运动&#xff0c;那种介于生命与机械之间的诡…...

OpenClaw从入门到应用——工具(Tools):多智能体沙箱与工具配置

通过OpenClaw实现副业收入&#xff1a;《OpenClaw赚钱实录&#xff1a;从“养龙虾“到可持续变现的实践指南》 概述 在多智能体设置中&#xff0c;每个智能体现在可以拥有自己的&#xff1a; 沙箱配置&#xff08;agents.list[].sandbox 会覆盖 agents.defaults.sandbox&…...

基于RAG与向量数据库的智能信息管理系统(IIMS)架构与实现

1. 项目概述&#xff1a;当AI成为你的“第二大脑”最近在折腾一个挺有意思的项目&#xff0c;叫“IIMS-By-AI”。乍一看这个标题&#xff0c;可能有点摸不着头脑&#xff0c;但拆解一下就能明白它的野心&#xff1a;IntelligentInformationManagementSystem&#xff0c; By AI。…...

ARM Jazelle技术:硬件加速Java字节码执行详解

1. ARM Jazelle技术概述Jazelle技术是ARM架构中用于硬件加速Java字节码执行的关键扩展&#xff0c;最早出现在ARMv5TE架构中。这项技术通过在处理器内部集成Java字节码执行单元&#xff0c;实现了Java虚拟机(JVM)功能的硬件化。与传统的软件解释器相比&#xff0c;Jazelle能够将…...