我正在使用spring boot 1.5.3并尝试将application-dev.properties文件中的属性注入Service bean,但该值始终为null。该值确实会在我的DevConfiguration类中加载。
我的基础包中有一个如下所示的应用程序类
package com.me;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我在
中有如下配置类package com.me.print.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@Profile("dev")
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource("classpath:application-dev.properties")
})
@ComponentScan(value = {"com.me.print.client"})
public class DevConfiguration {
@Value("${app.service.url}")
private String rootUri;
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
我正在尝试加载值的我的服务bean位于
之下package com.me.print.client;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.me.print.model.zitResponse;
@Service
public class zitPrintClient {
private final RestTemplate restTemplate;
@Value("${app.service.url}")
private String rootUri;
public zitPrintClient(RestTemplateBuilder restTemplateBuilder) {
restTemplate = restTemplateBuilder
//.rootUri(rootUri)
.build();
}
public zitResponse getpooltatus(String poolId) {
return restTemplate.getForObject("/pool/{poolId}/@status",
zitResponse.class, poolId);
}
}
在上面的类中,rootURI始终为null。有没有人对我缺少的东西有任何建议
在我的application-dev.properties文件中,我有以下
app.service.url=http://localhost:8080/zitprint/v1
由于
更新:
有没有人在这里有任何建议,因为我试图将属性注入我的控制器,如下所示:
@Value("${allowedVendors}") String allowedVendors
如果我将上面的内容放入构造函数中,它会找到值,但不会找到它:
public PController(@Value("${allowedVendors}") String allowedVendors) {
}
我无法在代码中进一步使用该属性,因为构造函数我已经通过构造函数创建了bean 1的两个实例,而另一个是由spring DI创建的。没有构造函数
的任何想法为什么值不会注入由于
答案 0 :(得分:2)
您需要将其作为参数放在构造函数中:
Query
在创建对象时,首先调用构造函数。成员变量rootUri会在创建对象后注入它的值。因此,在调用构造函数时,rootUri成员变量将为null。
(并且,为了更好的可读性,你的课程应该以大写字母开头,即ZitPrintClient,但它是你的代码...)