1

嘿,我按照分步指南在 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.

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

4

1 回答 1

5

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

  1. 搜索任何 Spring managedbean实现 OR 符合功能接口的契约Supplier<T>Consumer<T>并且Function<T, R>.
  2. 将这些标记beans为可能beans绑定到事件端点(绑定)。
  3. 如果bean在第 1 步中只解析了一个 Spring 管理,那么该 bean 将是唯一bean绑定为应用程序公开的函数(绑定到外部事件端点)——有效地假设应用程序是一个无服务器函数
  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

希望这可以帮助。

于 2019-12-07T01:40:40.227 回答