为了账号安全,请及时绑定邮箱和手机立即绑定

spring boot 2 属性配置

spring boot 2 属性配置

慕森王 2021-09-29 16:21:40
我有一些代码可以在 2 之前的 spring boot 上正常工作,我发现很难将其转换为与 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不再存在并且YamlPropertySourceLoaderload 方法不再接受 3 个参数。(响应也不相同,当我尝试调用新方法时,响应对象被包装而不是给我直接字符串/整数等......)
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

该PropertiesConfigurationFactory应改为Binder类。


粘合剂类


示例代码:-


ConfigurationPropertySource source = new MapConfigurationPropertySource(

                loadProperties(resource));

Binder binder = new Binder(source);

return binder.bind("initializr", InitializrProperties.class).get();

我们还使用 PropertiesConfigurationFactory 将 POJO 绑定到 Environment 的前缀。在 2.0 中,引入了全新的 Binder API,更加灵活易用。我们需要 10 行代码的绑定可以减少到 3 行简单的代码。


YamlPropertySourceLoader:-


是的,这个类在版本 2 中已经改变了。它不再接受第三个参数profile。方法签名已更改为 returnList<PropertySource<?>>而不是PropertySource<?>。如果您期待单一来源,请从列表中获取第一个。


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


查看完整回答
反对 回复 2021-09-29
  • 3 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信