我对spring boot
中的启动有疑问,如何在启动期间关闭应用程序,例如,我有以下问题
application.yml
:
ansi:
true
我有以下@Configuration
类:
@Configuration
class AppConfig {
@Value('${ansi}')
String ansi;
@Bean
getAnsi() {
if(ansi.equals("true")) {
Ansi ansiObj = new Ansi();
ansiObj.ansi = ansi;
return ansiObj;
}
}
}
class Ansi {
String ansi;
}
当ansi
中的application.yml
为true
时,它将继续,否则,应关闭该应用程序,我们可以在bean创建期间关闭该应用程序吗?这是一个好习惯吗?有什么好的方法可以解决这个问题?
答案 0 :(得分:0)
如果bean引发异常,那么Spring将不会继续,并且该过程将结束。
if(ansi.equals("true")) {
Ansi ansiObj = new Ansi();
ansiObj.ansi = ansi;
return ansiObj;
}
else {
throw new IllegalArgumentException("reason");
}
我不能说我曾经有过用例,但是我不会说这是必要的坏习惯。在这个对与错的有限示例中,这似乎有点不寻常。如果您需要对属性进行约束(例如X <10
答案 1 :(得分:0)
我们有很多选项可以关闭spring-boot应用程序:
关闭其余端点-在您的application.properties中添加以下属性,并在请求curl -X POST localhost:port/actuator/shutdown
之后触发
management.endpoints.web.exposure.include=*
management.endpoint.shutdown.enabled=true
endpoints.shutdown.enabled=true
您还可以调用合适的方法来关闭应用程序:
close()
对象上调用方法ConfigurableApplicationContext
(它将关闭应用程序上下文)SpringApplication.exit(ctx, () -> 0);
请查看this文章以了解更多详细信息。