Micronaut 不是 Failfast
Micronaut not Failfast
我正在尝试使用 Micronaut。我注意到的一件事是 Micronaut 不会快速失败。
例如,如果我的 bean 中有这样的东西
@Value("${my.url}")
private String url;
并且如果没有使用键 my.url 定义的 属性,则
- 使用Springboot,服务器无法启动。
- 使用 Micronaut 服务器将启动。但是在尝试访问该变量时抛出异常。
我认为 failfast 会更好(如在 springboot 中)。所以想知道这在 micronaut 中是否也可行。
您可以为此使用 @ConfigurationProperties
并确保它是 @Context
范围,因为默认情况下 Micronaut bean 不会在启动时创建。通过使它们成为 @Context
范围,将在应用程序启动时创建 bean。
以下:
import io.micronaut.context.annotation.*;
import javax.validation.constraints.*;
@ConfigurationProperties("my")
@Context
class MyConfig {
private @NotNull String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
结果
08:38:38.568 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [fresh.java.MyConfig] could not be loaded: Error instantiating bean of type [fresh.java.MyConfig]
Message: Validation failed for bean definition [fresh.java.MyConfig]
List of constraint violations:[
url - must not be null
]
当服务器启动时。
确保添加此依赖项
compile "io.micronaut.configuration:micronaut-hibernate-validator"
使用eager initialization使应用程序在配置错误时启动失败。来自 Micronaut 文档的示例,对于配置属性位于用 @ConfigurationProperties
或类似注释的专用 bean 中的情况:
public class Application {
public static void main(String[] args) {
Micronaut.build(args)
.eagerInitConfiguration(true) // Add this to fail fast
.mainClass(Application.class)
.start();
}
}
但是,这不适用于常规 bean 中的配置属性。您可以将配置移动到专用配置 bean,或者,如果那样太乱,您可以告诉 Micronaut 急切地初始化所有内容,这会增加启动时间,但如果 bean 无法初始化,则会很快失败。在上面的示例中将 eagerInitConfiguration
替换为 eagerInitSingletons
(有关更多详细信息,请参阅文档)。
我正在尝试使用 Micronaut。我注意到的一件事是 Micronaut 不会快速失败。
例如,如果我的 bean 中有这样的东西
@Value("${my.url}")
private String url;
并且如果没有使用键 my.url 定义的 属性,则
- 使用Springboot,服务器无法启动。
- 使用 Micronaut 服务器将启动。但是在尝试访问该变量时抛出异常。
我认为 failfast 会更好(如在 springboot 中)。所以想知道这在 micronaut 中是否也可行。
您可以为此使用 @ConfigurationProperties
并确保它是 @Context
范围,因为默认情况下 Micronaut bean 不会在启动时创建。通过使它们成为 @Context
范围,将在应用程序启动时创建 bean。
以下:
import io.micronaut.context.annotation.*;
import javax.validation.constraints.*;
@ConfigurationProperties("my")
@Context
class MyConfig {
private @NotNull String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
结果
08:38:38.568 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [fresh.java.MyConfig] could not be loaded: Error instantiating bean of type [fresh.java.MyConfig]
Message: Validation failed for bean definition [fresh.java.MyConfig]
List of constraint violations:[
url - must not be null
]
当服务器启动时。
确保添加此依赖项
compile "io.micronaut.configuration:micronaut-hibernate-validator"
使用eager initialization使应用程序在配置错误时启动失败。来自 Micronaut 文档的示例,对于配置属性位于用 @ConfigurationProperties
或类似注释的专用 bean 中的情况:
public class Application {
public static void main(String[] args) {
Micronaut.build(args)
.eagerInitConfiguration(true) // Add this to fail fast
.mainClass(Application.class)
.start();
}
}
但是,这不适用于常规 bean 中的配置属性。您可以将配置移动到专用配置 bean,或者,如果那样太乱,您可以告诉 Micronaut 急切地初始化所有内容,这会增加启动时间,但如果 bean 无法初始化,则会很快失败。在上面的示例中将 eagerInitConfiguration
替换为 eagerInitSingletons
(有关更多详细信息,请参阅文档)。