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

忽略缓存侦听器调用

夏侯俊美
2023-03-14

我正在为maven多模块项目研究缓存实现(exstremescale),我在下面添加了maven依赖项

    <dependency>
        <groupId>com.ibm.extremescale</groupId>
        <artifactId>ogclient</artifactId>
        <version>8.6.0.20150901-215917</version>
    </dependency>

添加了缓存注释

@Override
@Cacheable(value = "productDetails", key = "#productId + #orgId")
public Product productRead(final String productId, final String productKey, final String orgId, final CRApplicationEnum sourceSystem) throws IntegrationException {

cache-manager.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager" primary="true">
    <property name="caches">    
        <set>
            <bean class="com.ibm.websphere.objectgrid.spring.ObjectGridCache"
                p:name="eventDetails"  p:map-name="${iev.eventDetails.mapName}"
                p:object-grid-client-ref="wxsGridClient" />

            <bean class="com.ibm.websphere.objectgrid.spring.ObjectGridCache"
                p:name="eventValidationDetails"  p:map-name="${iev.eventValidationDetails.mapName}"
                p:object-grid-client-ref="wxsGridClient" />

            <bean class="com.ibm.websphere.objectgrid.spring.ObjectGridCache"
                p:name="productDetails"  p:map-name="${ipr.productDetails.mapName}"
                p:object-grid-client-ref="wxsGridClient" />

        </set>
    </property>
</bean>
<bean id="wxsCSDomain"
    class="com.ibm.websphere.objectgrid.spring.ObjectGridCatalogServiceDomainBean"
    p:catalog-service-endpoints="${xscale.catalogServiceEndpoint}" />

<bean id="wxsGridClient"
    class="com.ibm.websphere.objectgrid.spring.ObjectGridClientBean"
    p:catalog-service-domain-ref="wxsCSDomain" p:objectGridName="${wxs.objectGridName}" />

缓存只适用于项目的一个maven模块,我可以看到缓存拦截器调用,对于maven模块的其余部分,它忽略了@cacheable注释(它不会进入拦截器)。

我们没有PostConstructor或自我调用

我们使用atomikos作为事务管理器和CXF拦截器,在使用缓存方法之前将执行这些拦截器。

请帮帮我

共有2个答案

濮阳振海
2023-03-14

在同一个类中调用方法会绕过动态代理,也会绕过作为动态代理逻辑一部分的任何交叉问题,如缓存、事务等。那么,当从同一个类中调用Spring cache@Cacheable方法时,您的问题是否会被忽略?

如果是这样,修复方法是使用AeyJ编译时或加载时编织。

令狐唯
2023-03-14

您对JdkDynamixAopProxy的评论和查看代码让我认为您用@Cacheable注释的方法是在一个具体类中。为了让对具体类的注释表现出适当的行为;您需要在应用程序中启用cglib代理。

这可以通过向缓存注释驱动的标记添加代理目标类参数来实现。

<代码>

如果您不想为整个应用程序启用基于类的代理;可以通过使用以下注释对特定类进行注释来指定其行为:

@Scope(proxyMode=ScopedProxyMode.TARGET\u类)

 类似资料:
  • 我有一个JPanel,我的(游戏)程序在其中绘制了一些由一段代码决定的东西。到目前为止,一切都很好。我写了一个非常基本的侦听器,它侦听程序背景模型的变化,然后应该告诉GUI更新,即移动游戏外观。 所有这些都发生在mouseListener触发的方法中。 我猜这就是问题所在,因为在JPanel中再次单击鼠标会正确更新JPanel,我可以看到模型移动的部分。 JPanel的代码: 更新调用了很多AWT

  • 问题内容: 重要的最佳做法是不使用 在负载测试期间,请勿使用“查看结果树”或“在表中查看结果”侦听器,仅在脚本编写阶段使用它们来调试脚本。 或任何听众: 使用尽可能少的侦听器;如果使用上述的-l标志,则可以全部删除或禁用它们。 但是,它是调试脚本以识别脚本问题的好工具。 我们只能以非GUI模式运行时才能以某种方式忽略它吗? 我可以通过setIgnore方法忽略采样器结果,甚至可以通过在属性中将线程

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real

  • 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">

  • 1. 前言 本节介绍侦听器 watch 的使用方法。包括什么是侦听器,侦听器的特点,以及如何对不同类型的数据进行监听。其中重点掌握对不同类型的数据如何使用侦听器,了解它之后,在才能在之后的日常开发中熟练运用。 2. 慕课解释 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。 — 官方定义 侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据