【问题标题】:Spring boot starters creation optionsSpring Boot 启动器创建选项
【发布时间】:2020-08-04 14:47:22
【问题描述】:
我看到 Spring boot 项目以某种方式组织了启动器,即 starters 模块中只有 pom 依赖项,autoconfiguration 是一个单独的项目,其中所有启动器的 all pom dependencies 已添加为可选依赖项。
这是一种与 Apache camel 等其他大型项目不同的方法。他们的starters 也有 pom 依赖项以及自动配置代码。此外,这些启动器依赖于其他内部启动器。
我的问题是 - 我们什么时候应该选择一种方法而不是另一种方法,以及创建 spring boot 启动器的最佳方法是什么?一个比另一个有什么缺点/优点?另外,为什么 Spring Boot 的人选择以他们的方式组织启动器,因为将 pom 依赖项和自动配置结合在一起似乎是一种直观的方式?
【问题讨论】:
标签:
spring
spring-boot
spring-mvc
spring-boot-maven-plugin
【解决方案1】:
这是一个非常好的问题,需要考虑不同的方面。
让我们从 Spring Boot 开始。我们不希望以任何方式强制要求启动器。如果您想为“Web 应用程序”制作自己的启动器,或者如果您想自己列出依赖项(“webmvc”+ 您最喜欢的容器),那就这样吧。这是代码不在启动器中的主要原因,但不仅如此。另一个原因是自动配置代码可用并且可以适应您添加的库。如果将其拆分,则需要添加库+“正确”自动配置模块的组合。后者很容易忘记。
现在是第三方。我不能代表 Camel,但将自动配置代码与启动程序分开归结为您自动配置的代码是否可以适应可选依赖项。如果您的用例是关于自动配置库“acme”并且它没有任何可选功能,那么只有一个模块并完成它会更自然。如果您开始在启动器中添加可选依赖项,您可能需要重新考虑。
如果“acme”有多种风格、选项或可选功能,那么将自动配置分开会更好。这让其他人可以使用自动配置模块及其选项制作自己的启动器。在您这边,您可以制作“一个启动器”来提供您想要推广的选项。有点像我们对 spring-boot-starter-web 所做的,它将 Tomcat 作为默认容器。