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

Spring集成应用程序和缓存

萧霍英
2023-03-14

让spring集成应用程序具有入站http网关和出站http网关,在我想要缓存的两个网关之间,以避免不必要的请求。我唯一的解决方案是在它之后添加带缓存的拦截器和路由器,将cahced结果路由回回复通道,而非缓存的路由回出站,但这个解决方案对我来说似乎很棘手和丑陋。当入站网关具有相同的请求和应答通道时,带缓存的拦截器也可以正常工作(当返回具有相同标头但不同负载的新消息时,它被视为应答),但我不能使用这种情况。

有更好的主意吗?

共有1个答案

杜辰龙
2023-03-14

使用

因此,您的解决方案可能如下所示:

<int-http:outbound-gateway>
   <int-http:request-handler-advice-chain>
        <cache:advice>
              <cache:caching cache="foo">
                    <cache:cacheable method="handle*Message" key="#a0.payload"/>
              </cache:caching>
        </cache:advice>
   </int-http:request-handler-advice-chain>
</int-http:outbound-gateway>

其中handle*MessagehandleRequestMessageHttpRequestExecutingMessageHandler方法。而正是对于这种方法,Spring Integration应用了他的建议(例如,RequestHandlerRetryAdvice)。

在这里,您应该配置一个cacheManagerbean,选择缓存名称并为缓存条目确定一个键。在上面的示例中,#a0是来自handleRequestMessage参数的Message对象。因此,您可以根据消息属性(负载和头)指定任何SpEL表达式。而handleRequestMessage的结果将存储在缓存中。

当您为HTTP请求提供相同的参数时,结果将仅从缓存中返回。

 类似资料:
  • 我试图了解ApacheShiro工作流以及如何将其集成到我的应用程序中。我不明白的是,我如何以及在哪里执行登录,然后发送重定向?或者Shiro会自动执行此操作(因为我在ini文件中指定了域)?我可以发送自定义信息(用户属性)和重定向(通过Servlet响应而不是支持bean)吗? 到目前为止我所了解和拥有的: 将Shiro侦听器和过滤器添加到web。xml文件,以便它能够响应请求: 创建一个shi

  • 我有一个JavaSpring MVC应用程序(请注意,它不是Spring启动)。 我们需要为应用程序的用户实现SSO。我做了一些研究,在我们的例子中,身份提供者(IDP)是Azure AD。在这种情况下,服务提供者将是我的应用程序。我正在考虑为SSO使用SAML协议。另请注意-应用程序是基于超文本传输协议的(不是HTTPS) 到目前为止我所做的- 我已经在Azure上创建了一个企业应用程序,并配置

  • 看来我在pom.xml的当前设置中遗漏了一些东西。目前,我有一个使用启动程序配置的Spring Boot应用程序。 现在我要将这个应用程序与Spring Cloud brixton.m1集成。根据文档,我需要添加以下块: 线程“main”java.lang.nosuchmethoderror中出现异常:org.springframework.core.resolvabletype.forinsta

  • Spring integration提供了非反应的入站/出站WebSocket适配器,简单地说,它通过内部容器将会话与id相关联,您对消息进行一些处理,在出站时,它检查消息头是否有会话id,并通过该会话发送。 现在,Spring通过org.springframework.web.reactive.socket.WebSocketSession和其他类提供了反应性WebSocket支持,我想知道在反

  • 我正在尝试在我的应用程序中使用Spring Security SAML扩展。我搞不清楚正确的配置。在我的应用程序中,我使用的是Spring Java配置。这是我的代码: web.xml: 下面是我的配置类: 当我运行应用程序时,出现以下错误: 更多stacktrace: 组织。springframework。网状物上下文ContextLoader-上下文初始化失败。lang.CompatibleC