无法访问configure(SpringApplicationBuilder应用程序)函数中的@Value


import java.net.URI;
import java.net.URISyntaxException;
@SpringBootApplication
@ComponentScan({
"com.informatica.cloud.errorutil.springhandler",
"com.informatica.cloud.service.cdiclairerecommendation",
"com.informatica.cloud.commons.shutdown"
})
@PropertySource("classpath:cdiclairerecommendation-service-application.properties")
@EnableMicroserviceVersion
@EnableMicroserviceHealth
@EnableCircuitBreaker
public class CDIClaireRecommendationApplication extends SpringBootServletInitializer {
@Value("${ids.baseUrl}")
private String idsBaseUrl;
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

String CMS_SERVICE_URI = idsBaseUrl;

return application.sources(CDIClaireRecommendationApplication.class).listeners(new ApplicationStartingEventListener());

}
public static void main(String[] args) {
new SpringApplicationBuilder(CDIClaireRecommendationApplication.class)
.properties("spring.config.name:cdiclairerecommendation-service-application")
.run(args);
}
}

我在application.properties 中添加了ids.baseUrl的值

ids.baseUrl=http://localhost:16006/identity-服务

当我试图访问configure函数中ids.baseUrl的值时,它为null。有人能帮忙吗?

请确保application.properties具有ids.baseUrl,否则cdiclairerecommendation-service-application.properties中未显示。

其他原因可能是您使用new关键字创建类对象,但不使用autowiring策略(它将获得spring托管属性的可见性(。

我们还可以添加两个如下文件,将属性输入当前组件

@PropertySource({
"classpath:cdiclairerecommendation-service-application.properties",
"classpath:application.properties" 
})

快乐编码..:(

我不熟悉您构建Spring应用程序的方式,但我的猜测是,在Spring Context完全构建并执行所有自动布线之前,您的configure方法被调用得太早了。

在这种情况下,我要做的是让CDIClaireRecommendationApplication类实现CommandLineRunner,实现run方法,并在该方法中尝试访问idsBaseUrl变量。如果我是对的,那么在run方法运行时,该值将自动连接到位,您就会知道问题是由于初始化过程中发生的顺序造成的。

我不认为问题可能是由于您试图连接的特定属性的具体情况造成的。如果在Spring尝试自动连接时该属性不存在,那么我相信您会从Spring收到错误消息,初始化将失败。

最新消息:我刚刚确认了我所说的关于房产价值没有定义的内容。我更改了应用程序的一个@Value注释,以引用一个不存在的属性,我的应用程序启动失败,出现错误:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'xxxx' in value "${xxxx}"

这告诉我,您的问题是,要么该字段根本没有自动连线,要么是,但在调用configure方法之后。

最新更新