Spring boot @Value的值取不到
阿新 • • 發佈:2019-02-11
boot中@Value讀取配置資訊,1.宣告為Bean,可以被spring管理 2.要通過構造方法注入,通過new 物件的方式,@Value的值讀取不到。
例如如下圖:
配置Bean的配置
control中的引用@Data @NoArgsConstructor @Component public class OSSConfig{ // oss伺服器地址,北上廣深等 @Value("${live.oss.endpoint.video.gaokao}") private String endpoint; @Value("${live.oss.accessKeyId}") private String accessKeyId; @Value("${live.oss.accessKeySecret}") private String accessKeySecret; @Value("${live.oss.bucketName.gaokao}") private String bucketName; }
public class LiveOssController {
private LiveOssService liveOssService ;
private OSSConfig ossConfig ;
public LiveOssController(LiveOssService liveOssService,OSSConfig ossConfig){
this.liveOssService = liveOssService ;
this.ossConfig = ossConfig ;
}
}
@Value的兩種方式
基於@Value進行注入時有兩種方式,佔位符和spel表示式
//佔位符方式
@Value("${jdbc.url}")
private String url;
//SpEL表達方式,其中代表xml配置檔案中的id值configProperties
@Value("#{configProperties['jdbc.username']}")
private String userName;
這兩種方式需要在xml中配置時也是不一樣的
<!--基於佔位符方式 配置單個properties -->
<!--<context:property-placeholder location="conf/jdbc.properties"/>-->
<!--基於佔位符方式 配置多個properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location" value="conf/jdbc.properties"/>
</bean>
<!--基於SpEL表示式 配置多個properties id值為configProperties 提供java程式碼中使用 -->
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/conf/jdbc.properties</value>
</list>
</property>
</bean>
<!--基於SpEL表示式 配置單個properties -->
<!--<util:properties id="configProperties" location="classpath:conf/jdbc.properties"/>-->