我们什么时候使用SpringApplicationBuilder?

时间:2017-08-28 03:17:02

标签: java spring spring-boot

我正在阅读Spring微服务教程,其中包含以下内容:

new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);

我大多数时候都会看到这个启动Spring Boot应用程序:

SpringApplication.run(Application.class, args);

这是我第一次见到SpringApplicationBuilder。我们什么时候应该使用它?

3 个答案:

答案 0 :(得分:5)

我遇到的一个常见用例是,您希望在Weblogic等中部署传统的部署war文件 - Traditional deployment

使用SpringApplication,大多数应用程序设置都有硬编码的默认值,例如要使用的配置文件和属性文件等。您需要查看此类的代码才能理解这一点。

使用SpringApplicationBuilder,您可以在应用程序启动之前更改其中一些应用程序默认设置,即使这些设置中的大多数都具有合理的默认值。因此,只需几行代码,您就可以为不同的目的(嵌入式部署,外部部署,测试等)构建具有不同设置的不同应用程序,同时您的实际底层业务逻辑保持不变。

答案 1 :(得分:4)

在我们的应用程序中,我们在SpringApplicationBuilder应用程序中使用了starterstarter是一个简单的应用程序,它将以编程方式启动实际的应用程序实例。

要启动的进程数和进程web / standalone的类型将作为参数传递给starter应用程序,具体取决于应用程序实例将启动的参数。我们使用-w作为状态管理的Web应用程序启动。

boolean isWeb = // options parser, parse -w
new SpringApplicationBuilder(SpringBootAngularApp.class).web(isWeb).run(args);

还有另一种方法可以做同样的事情

SpringApplication sp = new SpringApplication(SpringApplicationBuilder.class);       
sp.setWebEnvironment(false);
sp.run(args);

我们还可以自定义横幅,使用SpringApplicationBuilder

的记录器

阅读文档了解更多用法

答案 2 :(得分:3)

假设您必须解决需要使用多个数据库或结构的问题,并且每个数据库或结构需要与另一个数据库或结构隔离,在这种情况下,我会使用SpringApplicationBuilder方法,因为每个域可以通过创建父和子上下文来隔离,并且不需要混合不同的域问题,例如,您可以拥有Application1和Application2配置,每个配置都有自己的域,控制器和存储库,但您不希望混合所有这些complixity,而不是你可以用SpringApplicationBuilder

创建两个不同的配置
 SpringApplicationBuilder appBuilder = new SpringApplicationBuilder()
        .sources(Parent.class);

 appBuilder.child(Application1.class).run(args);
 appBuilder.child(Application2.class).run(args);

其他一些信息:Post with an example of SpringApplicationBuilderJava Doc of SpringBuilderOther example of how use SpringApplicationBuilder