【问题标题】:How to share Repository and Service classes between 2 projects如何在 2 个项目之间共享存储库和服务类
【发布时间】:2018-10-25 09:40:29
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 您可以使用 maven 打包共享库并将它们用作两个项目中的依赖项

标签: java spring class share


【解决方案1】:

RepositoryService 类分离到一个子模块中。

结构如下:

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

那么问题是在公共模块中初始化bean。 AFAIK,你有两个选择:

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

    AutoConfiguration 类中定义服务/存储库@Bean

【讨论】:

  • 这绝对是有用的信息。不过,首先,我想知道如何首先将它们打包。我正在考虑创建第三个 Maven 项目并将其命名为 MDHIS_Common。然后我会创建一个类似的包结构,将公共类放在那里,并将这个项目打包为一个 jar 文件。最后,我需要以某种方式告诉我的两个 Maven 项目使用这个 jar 并删除每个类的“本地”副本。这有意义吗?
  • 是的。添加本地 Maven 依赖项很容易。为一些例子打气谷歌。真正困难的是当您将 bean 连接在一起时,我已经提供了一些选项
  • 希望对您有所帮助:)
【解决方案2】:

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

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

application-web.properties

application-backend.properties

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

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

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

现在,回到您的 java 代码。 如果只有一个应用程序正在使用类,您可以通过“配置文件”指定它。示例:

@Controller

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

通过这种方式,您可以使共享代码可用于两个应用程序,而无需复制大部分代码。

【讨论】:

  • 感谢您提供的信息。但是,我不明白这如何帮助我将常用类打包到一个(我只能假设)jar 中并使它们对每个项目可见。坦率地说,它们对两个项目都是可见的并不重要,我只是不想每个存储库、服务和实体类都有 2 个副本。我还想确保 Spring 可以很好地使用此设置以及如何实现它。
猜你喜欢
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多