Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果未提供标志,如何关闭/不启动spring应用程序?_Java_Spring_Spring Boot - Fatal编程技术网

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

Java 如果未提供标志,如何关闭/不启动spring应用程序?,java,spring,spring-boot,Java,Spring,Spring Boot,我使用@Value(${FOO}”)插入了一个标志,如果没有提供,我根本不希望我的spring应用程序启动(也就是说,FOO是一个强制标志) 这是我的主要课程: @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 我将FOO注入其中一个服务 我怎么

我使用
@Value(${FOO}”)
插入了一个标志,如果没有提供,我根本不希望我的spring应用程序启动(也就是说,
FOO
是一个强制标志)

这是我的主要课程:

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}
我将
FOO
注入其中一个服务


我怎么做呢?

如果你想注入Foo,你需要启动你的应用程序。这可能不是正确的方法,但会奏效。您可以做的是创建这样一个bean。在bean中,您可以添加自己的条件来关闭应用程序。这将阻止在创建bean时启动应用程序

@SpringBootApplication
public 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);
    }
}

属性占位符的解析由控制。默认情况下,如果无法解析占位符,则应引发异常:

如果配置程序无法解析占位符,将引发BeanDefinitionStoreException

然而,当我试图使用一个属性不存在的
@Value
时,它抛出了一个异常,但没有停止JVM

您可以强制它停止的方法是实现
初始化bean
,并检查
AfterPropertieSet()方法中的属性:

@Service
public 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");
        }
    }
}

在应用程序启动之前,可以使用SpringBoot运行程序来执行此操作。 你可以在这里找到例子

您如何提供价值?这是在本地tomcat中运行还是在pivotal中运行?@KalpeshSoni local tomcat使用--dFOO=“someValue”,如果不这样做,它应该会失败,这是默认行为,基于参数值public static void main(String[]args){if(某些条件不满足){System.exit(SpringApplication.exit(SpringApplication.run(SampleApplication.class,args));}run(SampleApplication.class,args);}