gpt4 book ai didi

java - Spring 两种不同的应用上下文——属性占位符冲突

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:58 28 4
gpt4 key购买 nike

我已经使用将要使用的 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 链接:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/support/PropertySourcesPlaceholderConfigurer.html

关于java - Spring 两种不同的应用上下文——属性占位符冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891522/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com