我已经使用将要使用的
Spring框架创建了一个SDK
与REST后端集成,以利用依赖注入.
在这个SDK中,我有MapPropertySources来处理PropertyPlaceHolders.
基本上我以编程方式注册我想要的一些属性
使用@Value注释在SDK中解析.
它在SDK中运行良好,但是当我构建SDK时(使用构建器)
在Spring-boot应用程序中,来自MapPropertiesPlaceHolder的属性
不再解决了.
我从构建器类中获得了这段代码:
public MyRepository build() {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext();
StandardEnvironment env = new StandardEnvironment();
context.setEnvironment(env);
Map<String, Object> propertiesMap = new HashMap<>();
propertiesMap.put("baseUrl", baseUrl);
MutablePropertySources mutablePropertySources = context.getEnvironment().getPropertySources();
mutablePropertySources.addFirst(new MapPropertySource("customPropertiesMap", propertiesMap));
if(jerseyClient == null){
jerseyClient = JerseyClientBuilder.createClient();
}
context.getBeanFactory().registerSingleton("jerseyClient", jerseyClient);
context.setParent(null);
context.register(MySdk.class);
context.refresh();
MySdk mySdk = new MySSdk(context);
return mySdk;
}
这是我实例化SDK的方式,我创建了一个新的
里面的Spring上下文.
问题是MapPropertySource中的属性
当我将SDK用作另一个中的maven依赖时,未解析
spring-boot应用程序.它可能与父母有任何关系
背景?这些属性尚未解决……我应该在哪里调查?
问题很长,我在SDK的测试中解析了@Value(‘${baseUrl}),但是当我将这个SDK包含在另一个spring-boot应用程序中时,它将不再被解析.为什么?
编辑:
MySdk类看起来像这样:
@ComponentScan
@Service
@PropertySource("classpath:application.properties")
public class DeviceRepository {
private ApplicationContext context;
public MySdk(){
}
public MySdk(ApplicationContext context) {
this.context = context;
}
// other methods that calls beans from context like
// this.context.getBean(MyBean.class).doSomething()
在同一个SDK中的测试中,一切正常.该
baseUrl属性被解析得很好,但是当我把这个SDK连接到另一个时
spring应用程序,在构建器中传递的属性,它们不是
由@Value注释识别.
最佳答案 您是否在Spring配置中定义了PropertySourcesPlaceholderConfigurer bean?每当属性解析在@Value注释中失败时,这是首先想到的事情之一.
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
链接到Javadoc: