Java 对于使用spring boot的多模块maven项目,公共模型和UTIL的正确位置
有一个多模型maven项目,dir布局如下: xxx-parent/ common/ common-web/ member-api/ admin-api/ market-service/ ... xxx父母/ 普通的/ 公共网络/ 成员api/ 管理api/ 市场服务/ ... 如您所见,有一个父pom和多个子模块,Java 对于使用spring boot的多模块maven项目,公共模型和UTIL的正确位置,java,spring-boot,maven,redis,microservices,Java,Spring Boot,Maven,Redis,Microservices,有一个多模型maven项目,dir布局如下: xxx-parent/ common/ common-web/ member-api/ admin-api/ market-service/ ... xxx父母/ 普通的/ 公共网络/ 成员api/ 管理api/ 市场服务/ ... 如您所见,有一个父pom和多个子模块,common或common xxx模块是公共部分,它是其他非公共模块的依赖项,用于代码重用 问题 A。您将
common
或common xxx
模块是公共部分,它是其他非公共模块的依赖项,用于代码重用
问题
- A。您将把
类放在哪里,这些类通常是POJO,带有私有字段和getter/setter。模型
这些模型可能被多个非通用子模块重用(例如
和市场服务
)李>管理api
- B。对于某些api,这些模型可以在返回的json中重用,但只需要部分字段,您会为这种情况创建一个单独的POJO(通常我称之为
)吗?如果是这样的话,你可能会把它放在特定的子模块(例如管理api)中,而不是放在普通项目中,对吗实体
- C。如果这是一个基于
的项目,并且它使用spring boot
,我们编写了一个Redis util,它可以用于大多数Redis操作。Redis
问题是,如果我们将redis util及其maven依赖项设置为公共,那么它将在应用程序启动时自动连接到redis,但某些子模块不需要redis。
我正在考虑的解决办法是:- 为util创建一个单独的子模块
。common redis
但也会有其他UTIL(例如
),而且似乎有太多的通用模块通用jdbc
- 通过
禁用特定功能(如redis)的sprint boot自动配置,以便它不会在启动时尝试连接到redis@EnableAutoConfiguration
- 为util创建一个单独的子模块
xxx-parent/
common/
common-web/
member-api/
admin-api/
market-service/
...
让我逐一回答问题
A.您将模型类(通常是POJO)放在哪里
私有字段和getter/setter。这些模型可能会被重用
多个非通用子模块(例如市场服务和
管理api)
通常,在父项目xxx parent
下,模型类位于名为xxx entities
或xxx defs
(defs代表定义)的单独模块下。我不确定common
模块包含什么,但有些项目使用xxx commons
来定义公共模型(/pojo/Entities)。这是作为依赖项提供给其他模块的模块。示例:如果您有一个单独的持久性层,该层希望对模型类进行操作,并且您希望将其与您为服务编写的REST客户端库分离
B.对于某些api,这些模型可以在返回的json中重用,但是
只需要部分字段,您是否会创建一个单独的POJO
(通常我称之为实体)对于这种情况?如果是的话,你会的
可能会将其放在特定的子模块(例如管理api)中,而不是
普通项目,对吗
您可以重用我前面提到的同一个模型库。如果只需要部分字段,则只设置这些字段(而其他字段保持为空)并返回。大多数REST库都有序列化设置,您可以将其设置为在从对象生成JSON时忽略空值。例如:
C.如果这是一个基于spring启动的项目,并且它使用Redis,那么我们
编写了一个redis util,它可以被大多数redis操作重用。
问题是如果我们将redis util及其maven依赖项
转换为公共,然后在应用程序启动时连接到redis
自动,但某些子模块不需要redis
你的方法听起来不错。您可以有一个库,比如说
datautils
,它可以有与数据库(Redis、RDBMS等)相关的操作的包装器。您可以使用init
类方法来确保它们不会自动加载,除非它们的客户端显式调用。应注意确保Redis主机名、端口等配置应从包含此数据utils
客户端的父模块加载,并且此库不能将此类配置作为其一部分。很高兴听到其他人通常会这样做。@EricWang,这回答了您的问题吗?老实说,我很确定,问题的一部分仍然模糊,我已经投了赞成票,如果模糊部分得到确认,我将来可能会接受。@EricWang,当然。