Micronaut 配置 属性 默认值

Micronaut configuration property default value

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

假设我有以下配置 class

@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 中设置值,class 中的默认值就会被解析 (/api/v1)。

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

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

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

Micronaut 非常基于注解,所以你可以简单地包含注解

@Nullable

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

同样在你的配置中 class 你做了类似的事情:

@ConfigurationProperties("app")
public class ApplicationConfiguration {

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

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

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

}