【问题标题】:Micronaut configuration property default valueMicronaut 配置属性默认值
【发布时间】:2019-03-30 12:13:27
【问题描述】:

我不确定这是一个错误。事实上,这可能是预期的行为。

假设我有以下配置类

@ConfigurationProperties("app")
public class ApplicationConfiguration {

    public String uri = "/api/v1";

    // I also tested with optional, no difference
    // public Optional<String> uri = Optional.of("/api/v1");
}

我在控制器上使用注解@Controller("${app.uri}/some/path")

如果我没有在application.yml 中添加条目,那么最终会出现以下错误:

Could not resolve placeholder ${app.uri} in value: ${app.uri}/some/path

如果我将以下行添加到我的application.yml

app:
  uri: /api/v2

然后一切正常:占位符解析为/api/v2,并且可注入配置对象中的值设置为/api/v2,而不是默认值/api/v1

我原以为如果我不在 application.yml 中设置值,则该类中的默认值将被解析 (/api/v1)。

同样,这可能只是设计使然,这很好。我只是想知道我是否做错了什么,在这种情况下,如何解决。

【问题讨论】:

    标签: micronaut


    【解决方案1】:

    这是预期的行为。知道一个属性在配置类中是否有默认值是不可行的。要在该上下文中提供默认值,只需执行以下操作:

    @Controller("${app.uri:/api/v1}/some/path")

    【讨论】:

    • 感谢您的澄清。我可能会坚持不设置默认值,只是将其添加为必需的道具。
    【解决方案2】:

    Micronaut 非常基于注释,因此您可以简单地包含注释

    @Nullable
    

    与您的@Property 注释一起防止编译错误。

    在您的配置类中,您还可以执行以下操作:

    @ConfigurationProperties("app")
    public class ApplicationConfiguration {
    
        @Nullable
        public String uri = "/api/v1";
    
        public String getUri() {
             return uril?: "/api/v1"
        }
    }
    

    【讨论】:

    • 不,不幸的是,这不起作用。从代码来看,这种方法与我发布的方法没有什么不同是有道理的。不过还是谢谢你的提议!
    • Nullable 注释有效,我在我的代码中使用它,虽然我没有将它与 ConfigurationProperties 注释一起使用,但我直接使用 Property 注释来调用配置,有时添加 Nullable 以将属性标记为可选。
    【解决方案3】:

    查看micronaut configuration 的最新文档,以下应该可以工作。

    import io.micronaut.context.annotation.ConfigurationProperties
    import javax.validation.constraints.Min import javax.validation.constraints.NotBlank
    
    @ConfigurationProperties('my.engine')
    class EngineConfig {
    
        @NotBlank
        String manufacturer = "Ford"
    
        @Min(1L)
        int cylinders
        CrankShaft crankShaft = new CrankShaft()
    
        @ConfigurationProperties('crank-shaft')
        static class CrankShaft {
            Optional<Double> rodLength = Optional.empty()
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2012-04-07
      相关资源
      最近更新 更多