mcspring-boot icon indicating copy to clipboard operation
mcspring-boot copied to clipboard

Server not stopping when spring context is already closed

Open CC007 opened this issue 5 years ago • 3 comments

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.

CC007 avatar Dec 22 '19 15:12 CC007

Server is also not responding to Ctrl-C in this state

CC007 avatar Dec 23 '19 22:12 CC007

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.

Alan-Gomes avatar Jul 06 '20 22:07 Alan-Gomes

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

CC007 avatar Jul 21 '20 23:07 CC007