PropertiesConfigurationFactory

PropertiesConfigurationFactory

我有一些代码可以在Spring Boot 2之前的版本上正常工作,并且发现很难将其转换为与Spring Boot 2一起使用。

有人可以协助吗?

public static MutablePropertySources buildPropertySources(String propertyFile, String profile)
{
    try
    {
        Properties properties = new Properties();
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();

        // load common properties
        PropertySource<?> applicationYamlPropertySource = loader.load("properties", new ClassPathResource(propertyFile), null);
        Map<String, Object> source = ((MapPropertySource) applicationYamlPropertySource).getSource();

        properties.putAll(source);

        // load profile properties
        if (null != profile)
        {
            applicationYamlPropertySource = loader.load("properties", new ClassPathResource(propertyFile), profile);

            if (null != applicationYamlPropertySource)
            {
                source = ((MapPropertySource) applicationYamlPropertySource).getSource();

                properties.putAll(source);
            }
        }

        propertySources = new MutablePropertySources();
        propertySources.addLast(new PropertiesPropertySource("apis", properties));
    }
    catch (Exception e)
    {
        log.error("{} file cannot be found.", propertyFile);
        return null;
    }
}

public static <T> void handleConfigurationProperties(T bean, MutablePropertySources propertySources) throws BindException
{
    ConfigurationProperties configurationProperties = bean.getClass().getAnnotation(ConfigurationProperties.class);

    if (null != configurationProperties && null != propertySources)
    {
        String prefix = configurationProperties.prefix();
        String value = configurationProperties.value();

        if (null == value || value.isEmpty())
        {
            value = prefix;
        }

        PropertiesConfigurationFactory<?> configurationFactory = new PropertiesConfigurationFactory<>(bean);
        configurationFactory.setPropertySources(propertySources);
        configurationFactory.setTargetName(value);
        configurationFactory.bindPropertiesToTarget();
    }
}


PropertiesConfigurationFactory不再存在,并且YamlPropertySourceLoader加载方法不再接受3个参数。

(响应也不相同,当我尝试调用新方法时,响应对象被包装而不是直接给我直接的字符串/整数等)

最佳答案

PropertiesConfigurationFactory应替换为Binder类。

Binder class

示例代码:-

ConfigurationPropertySource source = new MapConfigurationPropertySource(
                loadProperties(resource));
Binder binder = new Binder(source);
return binder.bind("initializr", InitializrProperties.class).get();



  我们还使用PropertiesConfigurationFactory将POJO绑定到
  环境的前缀。在2.0中,全新的Binder API
  引入了更灵活,更易于使用的功能。我们的约束力
  用了10行代码就可以简化为3行。


YamlPropertySourceLoader:-

是的,此类已在版本2中进行了更改。它不再接受第三个参数profile。方法签名已更改为返回List<PropertySource<?>>而不是PropertySource<?>。如果您希望使用单一来源,请从列表中获取第一个信息。


  将资源加载到一个或多个属性源中。实作
  可能返回包含单个来源的列表,或者
  多文档格式(例如yaml)中的每个文档的来源
  资源。

09-13 01:00