带有 Spring Boot 的 Cloud Kafka 给我错误

Das*_*sma 2 java spring-boot spring-cloud spring-cloud-stream spring-cloud-function

嘿,我按照分步指南在 Spring Boot 中设置 kafka。

但现在我无法启动该应用程序。有什么建议 :)

日志中的错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'functionInitializer' defined in class path resource [org/springframework/cloud/stream/function/FunctionConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Found more then one function in BeanFactory: [persistentEntities, resourceMappings]. Consider providing 'spring.cloud.function.definition' property.
Run Code Online (Sandbox Code Playgroud)

什么是 spring.cloud.function.definition?以及如何设置呢?引起原因:java.lang.IllegalArgumentException:在 BeanFactory 中发现多个函数:[persistentEntities,resourceMappings]。考虑提供“spring.cloud.function.definition”属性。

Mar*_* R. 6

Spring Cloud Function 在应用程序中执行以下操作:

  1. 搜索任何bean实现或符合功能接口契约的Spring 管理的和Supplier<T>Consumer<T>Function<T, R>
  2. 将它们标记beans为可能beans绑定到事件端点(绑定)。
  3. 如果在步骤 1 中只有一个 Spring 托管解析,那么该 bean 将是应用程序公开的函数bean(绑定到外部事件端点)的唯一bean绑定- 有效地假设应用程序是一个Serverless Function
  4. 如果在步骤 1 中解析了多个 Spring 托管bean解析,则 Spring Cloud Function 将查看属性spring.cloud.function.definition来解析其中哪些beans应绑定到端点。
  5. 如果未分配此属性,则 Spring Cloud Function 将抛出一个IllegalArgumentException(您收到的)抱怨它无法解析 您想要公开的 bean(它已找到的所有潜在功能)。 bean
  6. 分配给属性的值spring.cloud.function.definition将被读取为以分号分隔的功能 bean名称列表

因此,要解决您的问题,您需要:

  • 只需在Spring上下文中注册beanpersistentEntities或bean即可resourceMappings;但不是两者兼而有之。

  • 将以下条目添加到 Spring 上下文的属性中:

spring.cloud.function.definition=persistentEntities;resourceMappings
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。