java – Spring两个不同的应用程序上下文 – 属性占位符碰撞

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

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

点赞