mcspring-boot
mcspring-boot copied to clipboard
Server not stopping when spring context is already closed
When something goes wrong during startup of the spring context, but the spigot server does start, I get an error when I try to close the server with the /stop command:
>stop
[15:55:54 INFO]: 2019-12-22 | [Server thread] d.a.s.c.DefaultCommandExecutor:103 - Unexpected exception while running /stop
java.lang.IllegalStateException: org.springframework.context.annotation.AnnotationConfigApplicationContext@2b73a188 has been closed already
at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1089)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1104)
at dev.alangomes.springspigot.picocli.CommandLineDefinition.getBean(CommandLineDefinition.java:59)
at dev.alangomes.springspigot.picocli.CommandLineDefinition.doBuild(CommandLineDefinition.java:51)
at dev.alangomes.springspigot.picocli.CommandLineDefinition.build(CommandLineDefinition.java:43)
at dev.alangomes.springspigot.command.DefaultCommandExecutor.execute(DefaultCommandExecutor.java:71)
at dev.alangomes.springspigot.command.CommandInterceptor.onServerCommand(CommandInterceptor.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at dev.alangomes.springspigot.event.SpringEventExecutor.triggerEvent(SpringEventExecutor.java:33)
at dev.alangomes.springspigot.event.SpringEventExecutor.lambda$null$0(SpringEventExecutor.java:26)
at dev.alangomes.springspigot.context.Context.lambda$runWithSender$2(Context.java:140)
at dev.alangomes.springspigot.context.Context.runWithSender(Context.java:101)
at dev.alangomes.springspigot.context.Context.runWithSender(Context.java:139)
at dev.alangomes.springspigot.event.SpringEventExecutor.lambda$create$1(SpringEventExecutor.java:25)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:66)
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492)
at net.minecraft.server.v1_13_R2.DedicatedServer.handleCommandQueue(DedicatedServer.java:454)
at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:418)
at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:831)
at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:729)
at java.lang.Thread.run(Thread.java:748)
[15:55:54 INFO]: An internal error occurred while attemping to perform this command
It see it has something to do with Picocli.
Server is also not responding to Ctrl-C
in this state
I suggest you to manually perform Bukkit.shutdown()
(or context.close()
) in the case of any exception during startup, since this behavior is very opinionated and might be not wanted in every case.
I would, but as you can see in the exception, nowhere in the stacktrace any of my code is touched. That would make it very hard to catch an exception