Micronaut不失败

时间:2019-01-05 09:24:19

标签: micronaut

我正在尝试Micronaut。我注意到的一件事是Micronaut不会快速失败。

例如,如果我的豆子里有这样的东西

@Value("${my.url}")
private String url;

如果没有用键my.url定义的属性,则

  1. 使用Springboot,服务器将无法启动。
  2. 使用Micronaut服务器将启动。但是尝试访问该变量时会引发异常。

我认为快速失败会更好(就像在springboot中一样)。因此,我想知道在micronaut中是否也有可能。

2 个答案:

答案 0 :(得分:2)

您可以为此使用@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"

答案 1 :(得分:2)

如果出现配置错误,使用 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(有关详细信息,请参阅文档)。