Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们什么时候使用SpringApplicationBuilder?_Java_Spring_Spring Boot - Fatal编程技术网

Java 我们什么时候使用SpringApplicationBuilder?

Java 我们什么时候使用SpringApplicationBuilder?,java,spring,spring-boot,Java,Spring,Spring Boot,我正在学习Spring Microservices教程,其中包含以下内容: new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 在大多数情况下,我看到这一点是为了启动Spring启动应用程序: SpringApplication.run(Application.class, args); 这是我第一次看到SpringApplicationBuilder。我们一般什么时候应该使用它?在我们的应用程序中

我正在学习Spring Microservices教程,其中包含以下内容:

new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
在大多数情况下,我看到这一点是为了启动Spring启动应用程序:

SpringApplication.run(Application.class, args);

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

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

要启动的进程数和进程类型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
定制横幅、记录器


阅读文档了解更多用法

假设您必须解决一个问题,即您需要使用多个数据库或结构,并且每个数据库或结构都需要彼此隔离,在这种情况下,我将使用
SpringApplicationBuilder
方法,因为每个域都可以通过创建父上下文和子上下文来隔离,并且不需要混合不同的域问题,例如,您可以有Application1和Application2配置,每个域都有自己的域、控制器、,和存储库,但您不想混合所有这些复杂性,相反,您可以使用
SpringApplicationBuilder

 SpringApplicationBuilder appBuilder = new SpringApplicationBuilder()
        .sources(Parent.class);

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

一些附加信息:,

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

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


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

你在课堂上读过Javadocs吗?我读过。看起来好像它们是类似的类,但SpringApplicationBuilder提供了更多的控制,如配置文件等。在这种情况下,虽然ZuulaApplication看起来似乎只使用SpringApplication就可以了,但作者选择使用SpringApplicationBuilder…?在这种情况下,看起来使用是不必要的。
web
参数通常根据是否存在适当的依赖项自动确定;显式地将其设置为
true
将导致启动失败或冗余。事实上,我认为这很奇怪。。。