- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经使用将要使用的 Spring 框架创建了一个 SDK与 REST 后端集成,利用依赖注入(inject)。
在这个 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
应用程序。可能跟 parent 有关系语境?属性没有得到解决...我应该在哪里调查?
长话短说,我在 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 链接:
关于java - Spring 两种不同的应用上下文——属性占位符冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891522/
我是一名优秀的程序员,十分优秀!