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

是否可以为特定方法禁用spring cloud stream的功能绑定?

江恩
2023-03-14

我有一个基于Spring Boot的库(使用spring-data-mongo),它创建了一个PeristentEntitiesbean。PeristentEntities碰巧实现了供应商

我们使用的是Spring Cloud Streams Kafka绑定器,因此Spring尝试将这些对象中的每一个发布到它创建的Kafka主题。这会在JSON序列化程序中导致无限递归问题:

2019-12-04 15:36:54.323ERROR 1 --- [ 调度-1]o. s. i. h. LoggingHandler:org.springframework.messaging.MessagingException:调用方法失败;嵌套异常org.springframework.messaging.converter.MessageConversionException:无法写入JSON:无限递归(StackOverflow Error)(通过引用链:org.springframework.data.mongodb.core.mapping.BasicMongoPeristentEntity["idProperty"]-

有没有办法从函数绑定中排除我的bean?使用此库的项目没有使用Spring Cloud Function,但我更愿意保留这种可能性。

作为参考,my bean的定义如下:

@Bean
public PersistentEntities myPersistentEntities(List<MongoTemplate> mongoTemplates) {
    return new PersistentEntities(() -> {
        List<MappingContext<?, ?>> mappingContexts = mongoTemplates.stream().map(t -> t.getConverter().getMappingContext()).collect(Collectors.toList());
        return mappingContexts.iterator();
    });
}

我们刚刚将Spring Cloud从Greenwich升级到Hoxton,因此自动功能绑定对我们来说是新的。


共有2个答案

秦俊发
2023-03-14

所以,我遇到了类似的事情。TL;DR fix明确定义了Spring云流可用的函数,如下所示:

消费者Bean名称:inputConsumer

spring:
  cloud:
    stream:
      function:
        bindings:
          inputConsumer-in-0: DataInputBinding
        definition: inputConsumer
      bindings:
        DataInputBinding:
          binder: kinesis
          destination: whatever
          group: whatever

在我的情况下,我的应用程序有另一个spring组件,它实现了供应商。Spring Cloud Streams没有在配置中明确定义函数,只是将所有功能、消费者和供应商bean添加到FunctionCatalog,然后期望所有这些bean都连接到流。

显然,如果它们没有,那么它就不会连接任何一个,任何东西都不起作用/

曹沛
2023-03-14
匿名用户

通常,您可以通过将spring云函数显式排除为

@SpringBootApplication(exclude = ContextFunctionCatalogAutoConfiguration.class)

也就是说,请提出一个问题——https://github.com/spring-cloud/spring-cloud-stream/issues.以前已经出现过这种变体,我开始相信我们需要一个比上述更好的解决方案

另一种解决方法是显式指定spring。云作用定义=blah属性,其中blah是不存在的东西。很难看,但确实如此,而且它不需要重新编译,因为不涉及任何注释或其他属性。

但正如我所说,请提出一个问题,链接到这篇文章,我们将在年底前为SR1解决这个问题。

 类似资料:
  • 问题内容: 我正在使用Sphinx的autodoc插件来自动记录一组模块。我有一个函数accepts ,我想重写文档以显示Python stdlib文档使用的稍微更好的样式。 是否可以覆盖特定功能的自动文档输出? 问题答案: 可以使用以下方法覆盖签名: 但是,具有覆盖签名的函数不会与通过引入的其他函数进行排序。对每个函数使用显式指令可以解决此问题: 加成 您还可以附加到文档字符串: 要覆盖签名和文

  • 我在Vue中有一个(父)组件,它有自己的屏幕键盘,在它自己的Vue组件中。键盘跟踪输入的值,并将该值传递给父组件。有时父组件需要重置该值。 它当前的实现方式是直接修改传递到键盘的道具。这显然会产生警告。然而,这正是我在本例中所期望的行为:变量是同步的,如果父级更改了值,则应保持同步。换句话说:我想禁用此特定组件的此特定警告。 我可以在覆盖局部变量的属性中添加一个观察者,并使用局部变量来跟踪事件。那

  • 问题内容: 我有一个谜题网站,并且这是一种糟糕的作弊方式。可以,即使只是部分可以,但是可以做到吗? 我想到的是用图像替换字母,但是还有什么比这更容易的吗? 问题答案: 您可以禁用它而不是禁用“查找”功能,以使“查找”不会找到单词!一种方法是使用CSS 声明注入单词。查找将找不到它们: 您也可以很容易地编写一些Javascript来自动为您生成所有必要的CSS规则。

  • 来自以下来源: https://www.amazon.com/java-complete-reference-herbert-schildt/dp/0071808558 第8章:在继承中使用final 对于私有、静态、最终方法,应该使用早期(静态)方法绑定 所以正如我所认为的,这两个方法应该有不同的绑定类型。检查字节码: 在这里我看到了两个有害的指示。那么有什么方法可以确定类字节码使用了哪种绑定呢

  • 我正在开发一个使用JBoss RESTEasy(RESTEasy-jaxrs-3.0.8)的Web应用程序,但我想禁用RoleBasedSecurityFilter。java,只使用我自己的自定义类(它也实现,就像类一样,它们都是安全过滤器)。 这样做的原因是RoleBasedSecurityFilter.java的第43行调用了一个isUserInRole()方法,该方法在我的应用程序中总是返回

  • 问题内容: 我的Java应用程序出现问题,JIT破坏了代码。如果禁用JIT,一切正常,但运行速度慢10-20倍。 有什么方法可以禁用特定方法或类的JIT吗? 编辑:我正在使用Ubuntu 10.10,得到相同的结果都与: 和: 问题答案: 以下选项适用于我的JVM,以排除特定方法: