猿问

如果未提供标志,如何关闭/不启动 Spring 应用程序?

我使用注入一个标志@Value("${FOO}"),如果没有提供(即FOO是一个强制标志),我根本不希望我的 spring 应用程序启动。


这是我的主要课程:


@SpringBootApplication

public class Application {

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

}

我注入FOO其中一项服务。


我该怎么做?


眼眸繁星
浏览 123回答 3
3回答

函数式编程

属性占位符的解析由PlaceholderConfigurerSupport控制。默认情况下,如果无法解析占位符,它应该抛出异常:如果配置器无法解析占位符,则会抛出BeanDefinitionStoreException 。@Value但是,当我尝试将 a与不存在的属性一起使用时,它抛出了异常,但并没有停止 JVM。要强制其停止,您可以执行InitializingBean并检查方法中的属性afterPropertiesSet():@Servicepublic class YourService implements InitializingBean {    @Value("${foo:#{null}}") // set the default value to null    private String foo;    public void afterPropertiesSet() {        if (foo == null) {            throw new IllegalArgumentException("foo flag must be provided");        }    }}

狐的传说

如果你想注入 Foo 你需要启动你的应用程序。这可能不是正确的方法,但它会起作用。你能做的就是创建一个像这样的bean。在 bean 中,您可以添加自己的条件来关闭应用程序。这将阻止创建 bean 时应用程序的启动。@SpringBootApplicationpublic class SampleApplication {    @Value("${foo}")    private String foo;    @Bean    public String preventStart() {        if("no".equals(foo) ) {            System.exit(0);        }        return "started";    }    public static void main(String[] args) {        SpringApplication.run(SampleApplication.class, args);    }}

达令说

您可以使用 SpringBoot 运行程序在应用程序启动之前执行此操作。
随时随地看视频慕课网APP

相关分类

Java
我要回答