将JDA事件中继到Spring事件子系统会挂起整个Spring应用程序
我正在尝试使用SpringBoot和Kotlin为Discord机器人创建一个命令框架。我在Javacord上运行得很好,但最近我决定改用JDA,遇到了一个障碍。我正在制作的命令框架还将所有不一致事件中继到Spring事件系统,我目前正在使用自动连线的将JDA事件中继到Spring事件子系统会挂起整个Spring应用程序,spring,spring-boot,kotlin,discord-jda,Spring,Spring Boot,Kotlin,Discord Jda,我正在尝试使用SpringBoot和Kotlin为Discord机器人创建一个命令框架。我在Javacord上运行得很好,但最近我决定改用JDA,遇到了一个障碍。我正在制作的命令框架还将所有不一致事件中继到Spring事件系统,我目前正在使用自动连线的ApplicationEventPublisher抓取通用事件侦听器()并将所有内容发送到Spring。然而,spring应用程序似乎挂起了这一行,在使用一些断点对其进行调试之后,它似乎被卡在了这一行()。知道为什么会这样吗?我看过这个()但我不知
ApplicationEventPublisher
抓取通用事件侦听器()并将所有内容发送到Spring。然而,spring应用程序似乎挂起了这一行,在使用一些断点对其进行调试之后,它似乎被卡在了这一行()。知道为什么会这样吗?我看过这个()但我不知道该怎么办
SpringGenericEventPublisher.kt
@Component
class SpringGenericEventPublisher : EventListener {
@Autowired
private lateinit var context: ApplicationEventPublisher
override fun onEvent(event: Event) = context.publishEvent(event)
}
BotConfiguration.kt
(其中我有一个构建JDA实例的bean)
然后我有一个简单的监听器来测试
@Component
class FooComponent {
@EventListener(Event::class)
fun onFoo(event: Event) {
println("Reached `onFoo`")
}
}
有什么想法吗
提前谢谢
PS:我应该补充一点,我也在使用SpringDataRedis和SpringDataMongoDB,在这之前两者都会成功启动,命令注册表应该在这之后启动,只是没有。JDA实例完全可以登录,因为如果我只是在屏幕上打印一些东西,而不是在SpingenericEventPublisher
上发布事件,它将成功
@Component
class FooComponent {
@EventListener(Event::class)
fun onFoo(event: Event) {
println("Reached `onFoo`")
}
}