【发布时间】:2017-01-16 02:31:05
【问题描述】:
我正在尝试以编程方式重新启动我的 Spring 应用程序,而无需用户干预。
基本上,我有一个页面允许切换应用程序的模式(实际上意味着切换当前活动的配置文件),据我所知,我必须重新启动上下文。
目前我的代码很简单,只是用于重启位(顺便说一下这是 Kotlin):
context.close()
application.setEnvironment(context.environment)
ClassUtils.overrideThreadContextClassLoader(application.javaClass.classLoader)
context = application.run(*argsArray)
但是,当我执行context.close() 时,JVM 立即存在。我也尝试过context.refresh(),但这似乎只是杀死了 Tomcat/Jetty(都尝试过,以防万一它是 Tomcat 问题)然后什么也没有发生。
我也见过Programmatically restart Spring Boot application,但这些答案似乎对我没有任何帮助。此外,我查看了 Spring Actuator,它应该具有 /restart 端点,但它似乎不再存在?
【问题讨论】:
-
我上次刚刚读到一些关于 spring-cloud 的内容,有一个
refresh endpoint刷新了上下文中的所有 bean。也许你在那里发现了一些有用的东西。 Refresh Scope -
为什么这个标签是“java”?
-
因为我不在乎是否有人有 Java 或 Kotlin 的解决方案。 Kotlin 在这个问题上没有意义。
-
那么 java 也不重要......如果你标记 Java,至少提供一个 Java 版本的解决方案会很好。 (我可以做翻译,但可能不是所有使用 Java 编程并登陆这里的人都能做到)
标签: java spring spring-mvc spring-boot kotlin