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

Springboot yaml配置未读取布尔值

曹浩淼
2023-03-14

我刚开始穿弹力靴。这就是我要解决的问题。我有一个application.yml文件,它具有以下属性:

kinesis:
    streaming:
        client:
            featuretoggle:
                kinesisSenderFeature: true

我尝试使用以下代码访问KinesisSenderFeature的值:

@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private boolean featureToggle;

以及

@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}")
private Boolean featureToggle;

PropertySourcesPlaceHolderConfigureer bean定义为:

 @Bean
    @Primary
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("application.yml"));
        propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
        return propertySourcesPlaceholderConfigurer;
    }
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rabbitMessageConsumer': Unsatisfied dependency expressed through field 'featureToggle'; nested exception is org.springframework.html" target="_blank">beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Boolean'; nested exception is java.lang.IllegalArgumentException: Invalid boolean value [${kinesis.streaming.client.featuretoggle.kinesisSenderFeature}]

是的,我确实看到了:

  • 将Yaml中的列表映射到Spring Boot中的对象列表
  • Spring boot YAML配置未读取所有值
  • 将spring@Value注释计算为原始布尔值

我不想在这个属性周围创建一个bean,因为这只是一个布尔标志。

@Value("${kinesis.streaming.client.featuretoggle.kinesisSenderFeature:false}")
private boolean featureToggle;

注:正如@Andreas在评论中指出的,我尝试了给予

//In application.yml
kinesisSenderFeature:false

//In code
@Value("${kinesisSenderFeature}")
private boolean featureToggle;

即使这样也没用。但从yaml读取的其他属性没有任何问题。它是标准的application.yml,在src/main/resources中,我认为默认情况下应该读取?

任何帮助都将不胜感激。谢谢!

共有1个答案

巫马修然
2023-03-14

正如@pvpkiran指出的,您不需要PropertySourcesPlaceHolderConfigureer。只需将application.yml放在类路径上,Spring Boot就会将其取出来并分配boolean值。工作就像一个魅力,刚刚用Spring Boot1.5.2测试了它。

 类似资料:
  • 今天,我遇到了扫描函数的问题。假设您有一个类似于以下示例的结构。 如果运行以下代码 它会打印出来的 原因是fscanf函数假定a.bVal是一个整数,并覆盖a.nVal的前3个字节。这个问题可以通过下面的脏解来解决。 我的问题是,除了解释的解决方案之外,有没有更干净、更直接的方法来避免这个问题?

  • 我在我的windows机器上设置了Elk堆栈,其中包含以下内容: Elasticserach Logstash Kibana 我的logstash.conf 我的日志文件。日志(Apache日志) 当我运行logstash时。conf它在elasticsearch中创建以下索引: 上面的索引为空,无法从我的日志文件中获取任何数据。请帮忙?我对麋鹿很陌生。 当我使用以下方法查询索引logstash-

  • If set to true, config file values of on/true/yes and off/false/no get converted to boolean values automatically. This way you can use the values in the template like so: {if #foobar#} ... {/if}. If f

  • 我试图在Spring Boot 1.5.1项目中设置并使用YAML as配置文件。 我的YAML文件如下所示: 读取hue.get用户()非常好。但是,hue.get场景()由于某种原因返回null。我的色调配置Java代码如下所示: 我也尝试用前缀来注释每个类,hue.scenes.sunstatus、scenes.sunstatus和sunstate的格式都是如此。 此外,我还尝试使用@Val

  • PropKit工具类用来读取外部键值对配置文件,PropKit可以极度方便地在系统任意时空使用,配置文件的格式如下: userName=james email=no-reply@jfinal.com devMode=true 如下是 PropKit 代码示例: PropKit.use("config.txt"); String userName = PropKit.get("userName");

  • 您可以以如下各种方式加载或保存配置文件: 在 Burp 菜单中,您可以加载或保存所有用户级选项或项目级选项的配置文件。 在 Burp 的各个子工具的配置面板,您可以使用”选项(Options)”按钮来加载或保存该面板的配置。 在启动向导创建或打开项目时,您可以指定要需要载入的项目级的配置文件。 当您从命令行来启动 Burp 时,您可以使用命令行参数来指定要加载的项目级选项中的一个或多个配置文件。