如何在 2 个项目之间共享存储库和服务 类

How to share Repository and Service classes between 2 projects

我正在处理 2 个项目,一个 Web 应用程序 (Spring MVC) 和一个独立的后端服务应用程序 (Spring boot),它们会大量交互。我对两者都使用休眠,并且它们都使用 Netbeans IDE 进行编码。

我的 "issue" 是我最终在两个项目中都有重复的代码,主要是在存储库和服务层。我的实体显然也重复了,因为两个项目都使用相同的数据库。

有没有办法制作某种 class 库(也许是第三个项目?)并将所有通用代码放在那里?如果这确实可行,那么您如何更改每个项目,以便他们仍然可以访问此代码,就好像它是他们的一部分一样?我正在考虑将我所有的存储库、服务和实体都放在那里以避免代码重复并大大降低出错的风险。

谢谢!

我在这个答案中假设您的项目相互关联

您可以在一个 Spring 项目中设置多个 properties,在多个 属性 文件的帮助下,您可以在其中存储数据库连接参数等。
例如:

application-web.properties

application-backend.properties

您可以在您的项目中使用它们,方法是激活每个应用程序所需的属性文件。在这些情况下,配置文件名称将是 webbackend

当使用maven时,这是我使用的命令行:

mvn spring-boot:run -Drun.profiles=<<profile>>

现在,回到您的 java 代码。 如果 类 只有一个应用程序正在使用,您可以通过 'profile' 指定。示例:

@Controller

@Profile({ "web" })
public class WebEndpoint {
}

这样您就可以使共享代码可用于两个应用程序,而无需复制大部分代码。

RepositoryService class 分开到一个子模块。

结构如下:

-- your app
  -- api    (dependent on `common` module)
  -- webapp (dependent on `common` module)
  -- common

那么问题是在公共模块中初始化bean。据我所知,您有两个选择:

  1. apiwebapp模块的@Configurationclass中,将common模块的基础包添加到组件扫描包
  2. apiwebapp资源文件夹中,添加Spring配置工厂 /src/main/resources/META-INF/spring.工厂 org.springframework.boot.autoconfigure.EnableAutoConfiguration=your.path.AutoConfiguration

    AutoConfigurationclass

  3. 中定义service/repository@Bean