将JDA事件中继到Spring Event子系统会挂起整个Spring应用程序

时间:2019-04-15 12:13:23

标签: spring spring-boot kotlin discord-jda

我正在尝试使用带有Kotlin的Spring Boot为Discord Bot创建命令框架。我可以在Javacord上正常使用它,但是最近我决定改用JDA,但遇到了麻烦。我正在构建的命令框架还将所有Discord事件中继到Spring Event系统,而我目前正在做的是使用自动连接的{{1}来抓取通用事件侦听器(https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/core/hooks/EventListener.html)并将所有内容分发给Spring。 }。但是,spring应用程序似乎挂在该行上,并且在使用一些断点对其进行调试之后,似乎卡在了该特定行(https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java#L190)上。知道为什么会这样吗?我已经看到了这个(https://github.com/spring-projects/spring-framework/issues/20904),但是我不确定该怎么做...

ApplicationEventPublisher

SpringGenericEventPublisher.kt

@Component class SpringGenericEventPublisher : EventListener { @Autowired private lateinit var context: ApplicationEventPublisher override fun onEvent(event: Event) = context.publishEvent(event) } (我拥有构建JDA实例的bean)

BotConfiguration.kt

然后我有一个简单的监听器用于测试

    @Bean
    fun bot(config: BotProperties): Bot = JDABuilder()  // [Bot] is a typealias for [JDA]
        //.setCallbackPool(Executors.newSingleThreadExecutor())  // I've tried this because of the issue I linked above, but I got the same result
        .setToken(config.token)
        .addEventListener(springGenericEventPublisher)
        .build()

有什么想法吗?

预先感谢

PS:我应该补充一点,我也在使用Spring Data Redis和Spring Data MongoDB,并且在此之前都成功启动,并且命令注册表应该在那之后启动,只是没有。 JDA实例可以完美登录,因为如果我只是在屏幕上打印一些内容而不是在@Component class FooComponent { @EventListener(Event::class) fun onFoo(event: Event) { println("Reached `onFoo`") } } 上发布事件,它将成功。

0 个答案:

没有答案