首页 > 解决方案 > Axon 事件处理程序和查询处理程序在 kotlin 中不能一起工作

问题描述

代码:

@Component
open class UserProjectionQuery {
    @Autowired
    private lateinit var repository: UserDocumentRepository
    @Autowired
    private lateinit var updateEmitter: QueryUpdateEmitter

    @QueryHandler
    fun handle(query: QueryUserIdForUsername): String? {
       //stuff
    }

    @EventHandler
    fun on(evt: UserAuthenticated) {
       //stuff
    }
}

显然它没有注入我的存储库,也没有更新发射器。事件处理程序创建AnnotationQueryHandlerAdapter而不是AnnotationEventHandlerAdapter.

解决方案 atm 是将 's 移出@EventHandler到单独的类中,并将它们保留在那里,而@QueryHandler's 也在单独的类中。

我记得它正在使用java。我不确定我在这里缺少什么,但它似乎是一个 spring-kotlin 错误?任何提示将不胜感激,谢谢

标签: axon

解决方案


这很奇怪。我确信我的示例在类似的用例中可以正常工作

https://github.com/idugalic/digital-restaurant/blob/master/drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-restaurant/src/main/kotlin/com/drestaurant/query/handler/ RestaurantHandler.kt

考虑使用构造函数来注入你的依赖项(你会避免varand lateinit

class UserProjectionQuery(private val repository: UserDocumentRepository, private val updateEmitter: QueryUpdateEmitter)

您还可以使用 maven 插件kotlin-maven-plugin打开所有 Spring 配置类:https ://github.com/idugalic/digital-restaurant/blob/master/pom.xml#L177


推荐阅读