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);
}
}
添加回答
舉報