当前位置: 首页 > 知识库问答 >
问题:

加载配置属性时出错

鄂昌胤
2023-03-14

在我的spring boot 2应用程序中,我有一个应用程序。yml as,

 limitsconf:
   limits:
     - api: PUBLISH
       valueType: REQUEST
       serviceName: default   
       time:
         HOURLY: 10
         MINUTE: 10000

我的配置类是,

 @ConfigurationProperties(prefix = "limitsconf")
 public class DefaultRateLimitsConfig {
 private static final Logger logger = 
 LoggerFactory.getLogger(DefaultRateLimitsConfig.class);

 private List<DefaultLimit> limits = new ArrayList<>();

public static class DefaultLimit {
    String api;
    String valueType;
    String serviceName;
    Map<String,Long> time;

}

 }

代码在本地计算机中运行良好,所有值都按预期加载。但cloud env Consor将yml文件序列化为环境变量,因此我的配置表示为,

 key=limitsconf_limits value= [api:PUBLISH, valueType:REQUEST, serviceName:default, time:[HOURLY:10, MINUTE:10000]]

这是一个字符串。我不知道Consor以何种格式表示/序列化值。现在我的DefaultRateLimitsConfig无法加载,因为它会出错,

 Reason: No converter found capable of converting from type [java.lang.String] to type [java.util.List<DefaultRateLimitsConfig$DefaultLimit>]

如何以更干净的方式在两个环境中加载配置?

共有1个答案

斜昊空
2023-03-14

找到了原因和非常糟糕的解决方法。领事正在存储应用程序。名为“limitsconf\u limits”的环境变量中的yml值。我可以使用env命令找到它。所以根据Spring靴的外部配置https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.htmlOS env变量的优先级高于yml文件,因此出现错误“找不到能够从[java.lang.String]类型转换的转换器…”As OS env变量是一个字符串

解决方法是:我将键的值作为JSON字符串存储在yml文件中,并使用快速xml的ObjectMapper类对其进行解析。但我不知道是否有任何方法可以覆盖Springboot的默认优先级行为,以加载特定配置/类的外部配置

 类似资料:
  • 我有一个Spring Boot应用程序,它有一些配置属性。我正在尝试为一些组件编写测试,并希望从< code>test.properties文件中加载配置属性。我不能让它工作。 这是我的代码: 文件(在src/test/resources下): 配置属性类: 我的测试: 测试失败,并显示“预期实际不为空”,这意味着未设置配置属性类中的属性。

  • 我正在尝试从YML加载配置。如果这些是逗号分隔的值,我可以加载值,也可以加载列表。但我无法加载典型的YML列表。 配置类 工作路线。yml 不工作。yml 为什么我不能加载yml的第二个版本/我有一个语法错误? 环境:科特林,Spring2.0.0。M3

  • 问题内容: 在上面指出的行中发现异常。无论语言是否是有效的属性文件,我都会在同一行上捕获相同的异常。 问题答案: 改成:

  • 问题内容: 我想从属性文件加载配置(Apache Commons配置)。我的程序是: 在我有 用逗号 当我运行程序时,输出不是。看起来值一直加载到字符为止。 有任何想法吗? 问题答案: 检查Javadoc。您必须设置setDelimiterParsingDisabled(true)才能禁用属性分析列表。

  • 我在web应用程序中工作。我正在使用spring分析加载基于环境的属性。下面是样品 在web.xml中,我们可以给出配置文件 现在,我的查询是针对我需要创建一个单独的Java类的每个环境。 问题:是否可能只有一个类,比如提供配置文件名称作为某个绑定参数,比如。 同时,让我知道是否有其他更好的选择,以实现同样的。