1. 程式人生 > >Spring boot @Value的值取不到

Spring boot @Value的值取不到

boot中@Value讀取配置資訊,1.宣告為Bean,可以被spring管理 2.要通過構造方法注入,通過new 物件的方式,@Value的值讀取不到。

例如如下圖:

配置Bean的配置

@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;
}
control中的引用
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"/>-->