3 回答
TA贡献1807条经验 获得超9个赞
属性占位符的解析由PlaceholderConfigurerSupport控制。默认情况下,如果无法解析占位符,它应该抛出异常:
如果配置器无法解析占位符,则会抛出BeanDefinitionStoreException 。
@Value
但是,当我尝试将 a与不存在的属性一起使用时,它抛出了异常,但并没有停止 JVM。
要强制其停止,您可以执行InitializingBean
并检查方法中的属性afterPropertiesSet()
:
@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");
}
}
}
TA贡献1804条经验 获得超3个赞
如果你想注入 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);
}
}
添加回答
举报