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()
}
}
我不确定这是不是一个错误。事实上,这可能是预期的行为。
假设我有以下配置 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()
}
}