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

时间:2018-05-15 13:58:07

标签: java spring class share

我正在开发2个项目,一个Web应用程序(Spring MVC)和一个大量交互在一起的独立后端服务应用程序(Spring boot)。我正在使用hibernate,它们都使用Netbeans IDE进行编码。

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

将这些RepositoryService类分隔为子模块。

结构如下:

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

然后问题是在公共模块内初始化bean。 AFAIK,您有两种选择:

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

    @Bean

  3. 中定义服务/存储库AutoConfiguration

答案 1 :(得分:1)

我在这个答案中假设您的项目彼此相关

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

application-web.properties

application-backend.properties

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

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

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

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

@Controller

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

通过这种方式,您可以为两个应用程序提供共享代码,而无需复制大多数代码。