Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于使用spring boot的多模块maven项目,公共模型和UTIL的正确位置_Java_Spring Boot_Maven_Redis_Microservices - Fatal编程技术网

Java 对于使用spring boot的多模块maven项目,公共模型和UTIL的正确位置

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。您将

有一个多模型maven项目,dir布局如下:

xxx-parent/ common/ common-web/ member-api/ admin-api/ market-service/ ... xxx父母/ 普通的/ 公共网络/ 成员api/ 管理api/ 市场服务/ ... 如您所见,有一个父pom和多个子模块,
common
common xxx
模块是公共部分,它是其他非公共模块的依赖项,用于代码重用


问题
  • A。您将把
    模型
    类放在哪里,这些类通常是POJO,带有私有字段和getter/setter。
    这些模型可能被多个非通用子模块重用(例如
    市场服务
    管理api
  • B。对于某些api,这些模型可以在返回的json中重用,但只需要部分字段,您会为这种情况创建一个单独的POJO(通常我称之为
    实体
    )吗?如果是这样的话,你可能会把它放在特定的子模块(例如管理api)中,而不是放在普通项目中,对吗
  • C。如果这是一个基于
    spring boot
    的项目,并且它使用
    Redis
    ,我们编写了一个Redis util,它可以用于大多数Redis操作。
    问题是,如果我们将redis util及其maven依赖项设置为公共,那么它将在应用程序启动时自动连接到redis,但某些子模块不需要redis。
    我正在考虑的解决办法是:
    • 为util创建一个单独的子模块
      common redis

      但也会有其他UTIL(例如
      通用jdbc
      ),而且似乎有太多的通用模块
    • 通过
      @EnableAutoConfiguration
      禁用特定功能(如redis)的sprint boot自动配置,以便它不会在启动时尝试连接到redis

您的maven多模块结构:

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,当然。