2017-08-28 100 views
5

我会通过弹簧微服务的教程和它在它的下面一行:什么时候使用SpringApplicationBuilder?

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

多数时候我看到这一个启动春季启动应用程序的时间:

SpringApplication.run(Application.class, args); 

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

+1

你阅读类的Javadoc? – chrylis

+1

我做到了。看起来好像它们是相似的类,但SpringApplicationBuilder提供了对配置文件等的更多控制。在这种情况下,虽然看起来ZuulApplication对于SpringApplication来说可能会很好,但作者选择使用SpringApplicationBuilder ...? – Ole

+0

在这种情况下,它看起来好像不需要使用。 “web”参数通常基于适当的依赖关系是否可用来自动确定;明确地将其设置为“true”将使启动失败或将是多余的。 – chrylis

回答

2

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

基于应用程序实例将启动的参数,要启动的进程数和进程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

比方说,你必须要解决,你需要使用多个数据库或结构的工作问题,每一个需要被彼此隔离,在这种情况下,我会使用一个SpringApplicationBuilder的方法,因为每个域可以通过建立家长和孩子方面的隔离,也没有必要将不同领域的问题,例如,你可以有应用1和应用2的配置,每一个都有自己的域控制器和存储库但你不希望混合所有这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

2

,我碰到是当你想在Weblogic的需要部署一个传统的部署战争文件中的一个常见的情况 - Traditional deployment

随着SpringApplication,大多数的应用程序设置有硬编码像配置文件和属性文件的默认值使用等等。你需要看看这个类的代码来理解这一点。

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

相关问题