@Cachable注解不起作用

2024-04-07

我们在项目中使用 ehcache 进行缓存。

import com.googlecode.ehcache.annotations.Cacheable;
// Other imports

@Component
public class Authenticator{
    @Cacheable(cacheName = "rest_client_authorized")
    public boolean isUserAuthorized(final String user, final String sessionId) {
        // Method code
    }
}

进入方法时没有缓存拦截器。到目前为止我们检查过的事情:

  1. 我们不是从类内部调用这个方法,而是从外部调用。所以问题不在于内部调用导致绕过代理。
  2. 我们为此类添加了一个接口,并且更改了调用此类的注入以使用接口表示形式而不是具体类。

我们在应用程序上下文中定义了缓存管理器,如下所示:

   <ehcache:annotation-driven cache-manager="ehCacheManager" />         
   <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
       <!-- use a share singleton CacheManager -->
       <property name="shared" value="true" />
   </bean>

缓存的定义如下:

        <cache name="rest_client_authorized"
            eternal="false"
            maxElementsInMemory="50"
            overflowToDisk="false" diskPersistent="false"
            timeToIdleSeconds="0" timeToLiveSeconds="600"
            memoryStoreEvictionPolicy="LRU" />

当我们使用 Jconsole 测试缓存管理器时,我们可以看到缓存 *rest_auth_disabled* 存在且为空。

任何关于为什么这不起作用的想法将不胜感激。谢谢!

更新(来自下面评论的汇总):

===========================================**

这是一个遗留代码,可以很好地与我提供的类和定义配合使用。我在这里谈论的方法是新的,但班上的其他人过去确实有效。因此,我们正在努力了解发生了什么变化。我们也已经尝试将注释替换为 spring Cacheable,但仍然没有任何结果:/ 也许这取决于调用这个新方法的代码,它来自与我们用于其他方法的不同的 spring bean。但我还是找不到问题所在。

还尝试按照下面的答案返回布尔值而不是布尔值,但它不起作用。 我们有一个新的线索,它可能与我们注入 bean 的方式有关(使用@Autowire)。如果确实如此,将会更新。


这个问题可能与 Spring 加载 bean 的顺序有关。尝试从 Authenticator 声明中删除 @Autowire 注释,然后手动进行自动装配。就像是:

/**
 * Class that uses Authenticator
 */

 public class X {

    // Don't use @autowire here
    public Authenticator athenticator;

    public void doSomething() {
         manuallyAutowire();
    }

    public void manuallyAutowire() {
         if(authenticator == null) {
    authenticator = ApplicationContextUtils.getApplicationContext().
                            getBean(authenticator.class);
    }
}

Where

@Component
public class ApplicationContextUtils implements ApplicationContextAware {

    private static ApplicationContext ctx;

    @Override
    public void setApplicationContext(final ApplicationContext appContext) 
                                          throws BeansException {
         ctx = appContext;

    }

    public static ApplicationContext getApplicationContext() {
        return ctx;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Cachable注解不起作用 的相关文章

  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 身份验证在 Spring Boot 1.5.2 和 Oauth2 中不起作用

    我正在使用带有 spring boot 1 5 2 RELEASE 的 Oauth2 当我尝试重写 ResourceServerConfigurerAdapter 类的配置方法时 它给了我一个编译错误 但这在 Spring boot 1 2
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • Phonegap - 检测仿真

    Phonegap 应用程序如何确定它是在实际设备上运行还是在模拟设备上运行 我需要一个同时适用于 Android 和 iOS 的解决方案 你有没有看一下设备接口 http docs phonegap com en 3 3 0 cordova
  • 如何编写 mql4 代码 (EA) 用矩形标记列出的蜡烛形态

    我对写作很陌生mql4代码 如果我能在出现以下烛台图案时获得一些绘制矩形的帮助 我将不胜感激 FIG1 Run code snippet blockquote class imgur embed pub a href imgur com a
  • GPU编程简介[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每个人的桌面上都有一台以显卡 GPU 形式存在的巨大的大规模并行超级计算机 GPU 社区的 hello world 相当于什么 我该做什么 去哪
  • CBC 模式下的 HMAC-SHA256 和 AES-256

    我最近遇到以下代码示例 http code activestate com recipes 576980 authenticated encryption with pycrypto 用于使用 AES 256 CBC 和 SHA 256 H
  • 使用 Spring JPA 和 Hibernate 访问 Session 以启用过滤器

    在 Spring JPA Hibernate 环境中 我需要启用 Hibernate 实体过滤器 所以我应该有权访问 Hibernate Session 对象 但我正在使用 EntityManagerFactory 和 Spring JPA
  • 如何隐藏共享操作提供程序附近的共享操作(使用最多的)图标?

    看图片 如何隐藏 P 图标 表示分享到 Pinterest 它们都在操作栏上 我使用 ActionBarSherlock 如果您愿意保留所有分享历史数据模型 但只是不想要额外的 默认共享活动 icom 答案在使用 ShareActionPr
  • 将 java.sql.Timestamp 转换为 Java 8 ZonedDateTime?

    将 Joda 时间迁移到 Java 8 Joda UserObject user new UserObject user setCreatedAt new DateTime rs getTimestamp columnName 迁移到 Ja
  • 如何确定 C++03 中的类型是否可取消引用?

    In C 03 如何判断一个类型是否T是可解引用的吗 我的意思是 我如何静态地确定是否 t将是一个有效的表达式t类型的T 我的尝试 template
  • GitHub 与现有 GPG 密钥合并失败

    我们有多个 github 存储库 需要对拉取请求进行签名提交 有时 由于警告 提交需要签名 我们无法合并拉取请求 即使提交已签名 看起来创建拉取请求的人可以合并它 Sqash 和合并 即使它只包含 1 次提交 这发生在两个帐户都是拉取请求的
  • 迭代器的性能优势?

    使用迭代器可以提供哪些性能优势 如果有 这似乎是解决许多问题的 正确方法 但它是否会创建更快 更内存敏感的代码 我正在专门用 Python 思考 但不要将答案限制于此 实际上 Python 邮件列表上有一篇关于此的非常好的邮件 迭代器与列表
  • Angular 2:从另一个组件调用现有组件

    我正在使用路由功能使用 Angular 2 创建一个应用程序 并且我有一个由较高路由之一呈现的弹出组件 并且我想在由以下之一呈现的组件中的单击事件上打开它更深层次的路线 例如 假设我有一个基本路由器 其模板包含弹出窗口 Component
  • 使用 C++0x decltype 返回值时返回局部变量或临时变量的地址

    Edit 这确实是编译器的一个bug 我开了一个defect https connect microsoft com VisualStudio feedback details 573330 bad code generated for f
  • PDO 和清理日期/删除 HTML

    我让用户使用此代码更新他们的姓名 dbh connect q dbh gt prepare UPDATE Users SET username name WHERE User ID id LIMIT 1 q gt bindParam id
  • Angular:以可重用/干净的方法将 API 数据转换为新的数据类型

    我正在尝试将 API 响应转换为完全不同的 ViewModel 用于多个组件 a 一种解决方案是直接在 API 代理中映射 管道数据 但是如果我只想要简单的原始 API 数据 那么 API 代理的可重用性不是很好 b 此模型适配器模式可能不
  • .ctp 文件中使用的“o”和箭头符号之间的区别?

    我对模型文件中使用的 o 和 gt 有点困惑 例如 asset Field identified by assetId o String assetId o Customer owner gt Customer custId partici
  • 如何将 500GB SQL 表转换为 Apache Parquet?

    也许这是有详细记录的 但我很困惑如何做到这一点 有很多 Apache 工具 当我创建 SQL 表时 我使用以下命令创建表 CREATE TABLE table name column1 datatype column2 datatype c
  • Linux C++:从 main() 返回是否会导致多线程应用程序终止?

    这个问题看起来可能是重复的 但我找不到 如果我错过了之前的问题 抱歉 在 Java 中 我有大部分经验 如果你的 main 分叉一个线程并立即返回 进程将继续运行 直到进程中的所有 非守护进程 线程都停止 在 C 中 情况似乎并非如此 一旦
  • Spring Cloud 配置服务器不刷新

    我正在设置一个 Spring 云服务器来读取内部 Stash 目录 服务器第一次加载 但如果我更新 git 中的属性 它们不会得到反映 直到我重新启动云服务器 我尝试 POST 到 refresh 端点 我使用的是 Windows 我看到一
  • 使用JMS临时队列进行同步使用是一个好习惯吗?

    如果我们使用 临时队列 的 JMS 请求 回复机制 该代码是否可扩展 截至目前 我们不知道是否会支持每秒 100 个请求 或者每秒 1000 个请求 下面的代码是我正在考虑实现的代码 它以 同步 方式使用 JMS 关键部分是创建 消费者 以
  • @Cachable注解不起作用

    我们在项目中使用 ehcache 进行缓存 import com googlecode ehcache annotations Cacheable Other imports Component public class Authentic