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);}