Java 是否可以禁用spring cloud stream';特定方法的函数绑定?

Java 是否可以禁用spring cloud stream';特定方法的函数绑定?,java,spring-cloud-stream,spring-cloud-function,Java,Spring Cloud Stream,Spring Cloud Function,我有一个基于Spring引导的库(使用Spring data mongo),它创建了一个PersistentEntitiesbeanPersistentEntities碰巧实现了Supplier接口,因此Spring Cloud Stream functional binder正在为其创建绑定。更具体地说,BeanFactoryAwareFunctionRegistry.DiscoverDefaultDefinition如果需要会将其作为供应商类型的bean查找 我们使用的是Spring Clo

我有一个基于Spring引导的库(使用Spring data mongo),它创建了一个
PersistentEntities
bean
PersistentEntities
碰巧实现了
Supplier
接口,因此Spring Cloud Stream functional binder正在为其创建绑定。更具体地说,
BeanFactoryAwareFunctionRegistry.DiscoverDefaultDefinition如果需要
会将其作为
供应商
类型的bean查找

我们使用的是Spring Cloud Streams Kafka活页夹,因此Spring尝试将这些对象发布到它创建的Kafka主题。这会导致JSON序列化程序中出现无限递归问题:

2019-12-04 15:36:54.323错误1---[scheduling-1]o.s.i.h.LoggingHandler:org.springframework.MessagingException:调用方法失败;嵌套异常为org.springframework.messaging.converter.MessageConversionException:无法写入JSON:无限递归(StackOverflowerr)(通过引用链:org.springframework.data.mongodb.core.mapping.BasicMongoOperationResistentEntity[“idProperty”]->org.springframework.data.mongodb.core.mapping.cachingMongoOperationResistentProperty[“owner”]->org.springframework.data.mongodb.core.mapping.basicMongoProperty[“idProperty”]->org.springframework.data.mongodb.core.mapping.cachingmongOperateSistentProperty[“owner”]->org.springframework.data.mongodb.core.mapping.basicMongoProperty[“idProperty”]->org.springframework.data.mongodb.core.mapping.cachingmongOperateSistentProperty[“所有者”]->org.springframework.data.mongodb.core.mapping.BasicMongOperateSistentEntity[“所有者”]->org.springframework.data.mongodb.core.mapping.cachingmongOperateSistentProperty[“所有者”]->org.springframework.data.mongodb.core.mapping.BasicMongOperateSistentEntity[“idProperty”]->org.springframework.data.mongodb.core.mapping.cachingmongOperateProperty[“所有者”]->org.springframework.data.mongodb.core.mapping.basicMongoOperateProperty[“idProperty”]->org.springframework.data.mongodb.core.mapping.cachingmongOperateProperty[“所有者”]

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

作为参考,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();
    });
}
@Bean
公共持久性实体我的持久性实体(列表mongoTemplates){
返回新的持久性实体(()->{

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

@SpringBootApplication(exclude = ContextFunctionCatalogAutoConfiguration.class)
也就是说,请提出一个问题-。之前已经出现过这种变体,我开始相信我们需要一个比上述更好的解决方案

另一个解决方法是显式指定
spring.cloud.function.definition=blah
属性,其中
blah
是不存在的。丑陋,但有技巧,不需要重新编译,因为不涉及任何注释或附加属性


但是太长了,读不下去了,请把这个问题联系起来,链接到这个帖子,我们会在今年年底之前把它写到SR1上。

< P> >,我遇到了类似的事情。TL;DrFig是明确定义了这样的云云流可用的函数:

消费者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,这具有相同的效果,但这更为明确。我也创建了一个新问题: