Micronaut配置属性的默认值

时间:2019-03-30 12:13:27

标签: micronaut

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

假设我具有以下配置类

@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)。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

Micronaut是基于注释的,因此您只需添加注释

@Nullable

连同您的@Property批注一起使用,以防止编译错误。

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

@ConfigurationProperties("app")
public class ApplicationConfiguration {

    @Nullable
    public String uri = "/api/v1";

    public String getUri() {
         return uril?: "/api/v1"
    }
}

答案 2 :(得分:0)

请查看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()
    }

}