如何理解Spring Boot中的Starter?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解Spring Boot中的Starter?相关的知识,希望对你有一定的参考价值。

参考技术A 一个工作了3年的Java程序员,遇到一个Spring Boot的问题。

他对这个问题有一些了解,但是回答得不是很好,希望参考我的高手回答。

这个问题是:“如何理解Spring Boot中的Starter”。

对于这个问题,看看普通人和高手的回答。

普通人:

嗯。。。。。。。。。。。。。

高手:

Starter是Spring Boot的四大核心功能特性之一,除此之外,Spring Boot还有自动装配、Actuator监控等特性。

Spring Boot里面的这些特性,都是为了让开发者在开发基于Spring生态下的企业级应用时,只需要关心业务逻辑,

减少对配置和外部环境的依赖。

其中,Starter是启动依赖,它的主要作用有几个。

Starter组件以功能为纬度,来维护对应的jar包的版本依赖,

使得开发者可以不需要去关心这些版本冲突这种容易出错的细节。

Starter组件会把对应功能的所有jar包依赖全部导入进来,避免了开发者自己去引入依赖带来的麻烦。

Starter内部集成了自动装配的机制,也就说在程序中依赖对应的starter组件以后,

这个组件自动会集成到Spring生态下,并且对于相关Bean的管理,也是基于自动装配机制来完成。

依赖Starter组件后,这个组件对应的功能所需要维护的外部化配置,会自动集成到Spring Boot里面,

我们只需要在application.properties文件里面进行维护就行了,比如Redis这个starter,只需要在application.properties

文件里面添加redis的连接信息就可以直接使用了。

在我看来,Starter组件几乎完美的体现了Spring Boot里面约定优于配置的理念。

另外,Spring Boot官方提供了很多的Starter组件,比如Redis、JPA、MongoDB等等。

但是官方并不一定维护了所有中间件的Starter,所以对于不存在的Starter,第三方组件一般会自己去维护一个。

官方的starter和第三方的starter组件,最大的区别在于命名上。

官方维护的starter的以spring-boot-starter开头的前缀。

第三方维护的starter是以spring-boot-starter结尾的后缀

这也是一种约定优于配置的体现。

以上就是我对这个问题的理解。

总结

在技术的学习过程中,我认为“为什么是” 比 “是什么”要重要。

以这种方式来学习,带来的好处就是对技术理解会更加深刻。

这道题考察的就是“为什么是”,不难,关键在于自己的理解。

如果你喜欢这篇文章,记得点赞和收藏。

如果想获得一对一的面试指导以及面试资料,可以私信我。

如何使用 spqr-spring-boot-starter 在 graphql 中获取模式文件?

【中文标题】如何使用 spqr-spring-boot-starter 在 graphql 中获取模式文件?【英文标题】:How to get a schema file in graphql using spqr-spring-boot-starter? 【发布时间】:2020-11-16 07:03:40 【问题描述】:

谁能帮助我如何使用 spqr-spring-boot-starter 获取架构文件?

我在网上寻找解决方案,发现:How to get the generated scheme file .graphqls using SPQR?

new SchemaPrinter(
                  // Tweak the options accordingly
                  SchemaPrinter.Options.defaultOptions()
                          .includeScalarTypes(true)
                          .includeExtendedScalarTypes(true)
                          .includeIntrospectionTypes(true)
                          .includeSchemaDefintion(true)
            ).print(schema);

但我不确定我应该为模式传递什么?由于我使用的是 spqr-spring-boot-starter,因此我没有编写任何与 GraphQLSchema 实例相关的内容。

我需要架构文件来启用 Postman 中的自动完成功能。如果您对此有所了解,请提供帮助,这将非常有帮助。谢谢!

【问题讨论】:

【参考方案1】:

根据 spqr 教程,您可能希望在 RestController 类中定义您的 graphQL 模式,您可以将该对象用于 SchemaPrinter。 您可以将其设置为公开并在代码的其他地方使用它

@Autowired
public GraphQLController(CheckConfigurationDemoResolver checkConfigurationDemoResolver) 
    GraphQLSchema schema = new GraphQLSchemaGenerator()
    schema = new GraphQLSchemaGenerator()
            .withBasePackages("com.acme.mygraphqlproj")
            .withOperationsFromSingleton(checkConfigurationDemoResolver)
            .generate();
    graphQL = GraphQL.newGraphQL(schema).build();
    String schemaString = new SchemaPrinter().print(schema);
    System.out.println("schemaString = " + schemaString);

【讨论】:

以上是关于如何理解Spring Boot中的Starter?的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-starter-data-jpa 中的 Eaxmple 如何使用

如何完全覆盖spring boot starter的版本?

spring-boot-starter-parent和spring-boot-dependencies

SpringBoot整合rabbitMQ,spring-boot-starter-amqp 的使用

Spring Boot入门教程(三十一): 自定义Starter

手把手教你手写一个最简单的 Spring Boot Starter