天天看點

SpringBoot中@Value注解設定預設值

在SpringBoot項目讀取配置檔案中讀取值,我們會用到@Value注解來讀取配置值,例如我們在配置檔案中配置了伺服器web域名為xxx.com的配置:

server.web.domain=xxx.com
           

在代碼中讀取其配置項:

@Value("${server.web.domain}")
private String domain;
           

如果這個配置項在配置檔案中忘記配置或者有的場景中我們不需要配置這項的時候,在項目啟動的時候就會報錯。

報錯資訊如下:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'server.web.domain' in value "${server.web.domain}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178)
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124)
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239)
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175)
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:918)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1248)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	... 18 common frames omitted
           

這個時候就需要我們給@Value注解配置項給個預設值。

解決方法如下:

@Value("${server.web.domain:#{null}}")
 private String domain;
           

或者

@Value("${server.web.domain:xxx}")
  private String domain;
           

不過如果預設值我們要設定為null時,我們使用${server.web.domain:null}時,拿到domain的預設值會是“null" null的字元串,是以這種情況下,我們使用 ${server.web.domain:#{null}} 這種方式進行賦予預設值

繼續閱讀