如何为 Spring Boot 启动器拆分库中的代码

Posted

技术标签:

【中文标题】如何为 Spring Boot 启动器拆分库中的代码【英文标题】:How to split code in library for spring boot starter 【发布时间】:2021-10-19 02:07:39 【问题描述】:

假设我有一个库 A,它提供了可以像 spring-boot-starter 一样启用的给定功能,这意味着将依赖项添加到我的项目将使其可用。 p>

另一方面,我有另一个库 B,它提供了另一个功能,在工作方式上类似于库 A,但它是一个完全不同的功能。

现在我有一个案例,如果项目包含 库 A 和 B,我想以特定方式配置一些 bean。

我的问题是如何决定在哪里编写两个库所需的代码,显然它应该是:

库 A 具有对 B 的可选依赖项,并具有启用该 bean 的特定 @Configuration 相反,库 B 具有对 A 的可选依赖项,具有启用该 bean 的特定 @Configuration

在我的例子中,我故意让名称 A 和 B 尽可能通用,一个库正在为 mongo 应用一些特定配置,另一个是包装 mongock 迁移工具。

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

    在不考虑 Spring Boot 的情况下编写库 A 和 B(没有 bean、没有依赖项注入等) 在您的项目中将这两个库声明为依赖项 (Maven/Gradle) 定义一个@Configuration 类来定义你需要的所有bean,类似于this 用Spring profiles 和@Qualifier 决定您何时需要哪个

我写了一篇关于如何使用 @Profile 根据给定场景决定不同 Spring Bean 的博文:https://medium.com/twodigits/keep-your-code-debuggable-4ad69e5e0ac7

【讨论】:

以上是关于如何为 Spring Boot 启动器拆分库中的代码的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - 如何为指定根目录中的多个路由提供一个静态 html 文件

如何为我的 Spring Boot 控制器执行单元测试?

如何为 Spring Boot 应用程序的 gradle 构建设置活动配置文件?

如何为 Spring Boot Rest 使用自定义异常?

如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试

如何为 Spring Boot 应用程序配置端口