购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第5章
构建父子模块及配置文件

本项目的架构采用父子模块模型,其中父模块与多个子模块共同构建整体系统。子模块被用于实现不同代码功能,实现任务分工明确。例如,公共枚举类、配置、方法等可以在子模块中集成,从而为系统提供共享资源。这种模块化的划分使各子模块能够承担特定的职责,有利于代码库的组织、管理和维护。

5.1 构建子模块

在4.1节中,已经构建了一个名为library的项目。当前要将其演化为一个父模块,随后在其父模块的基础上创建多个子模块。接下来将创建一个名为library-admin的子模块。主要职责在于充当整个系统的启动项目,并承担项目所有配置文件的配置。

5.1.1 创建library-admin子模块

1.使用IDEA工具创建library-admin

打开IDEA工具,新建一个项目的主项目:library-admin,因为是系统的主入口,所以要保留启动类。右击library项目后选择New→Module选项,并新建一个Module模块,如图5-1所示。

选择左侧的Spring Initializr选项,与之前Web页面创建library项目基本一致,然后填写项目名称、选择语言、JDK版本和打包方式等信息,填写完成后,单击Next按钮,如图5-2所示。

选择Spring Boot 3.1.3版本,其余的保持默认,单击Create按钮,如图5-3所示。

等待library-admin项目创建完成,当前项目的结构目录如图5-4所示。

2.父模块依赖修改

在Maven项目中,父级依赖项可以被子模块继承,从而实现共享的依赖关系、插件配置等信息。这种机制让子模块能够利用父模块中定义的设置,从而达到统一管理、简化构建过程的效果。通过这样的方式,多个相关模块之间的依赖管理和构建过程将变得更加简单和高效。

图5-1 打开创建项目模块页面

图5-2 填写library-admin模块信息

父模块不包含任何业务代码,可以删除src文件夹和target文件夹,并修改父模块下的pom.xml文件,由于父模块不包含业务代码,仅用于管理子模块,所以选择将packaging标签的值设置为pom是非常合适的。这会告诉Maven该项目仅用于管理其他子模块,不会生成实际的构建产物,代码如下:

图5-3 选择Spring Boot版本

图5-4 目录结构

packaging标签在Maven项目的pom.xml文件中,用于指定项目的打包方式。它可以包含多个值,常见的有jar、war和pom,开发项目一般选择的是JAR包的方式。

(1)jar表示项目将以JAR(Java Archive)包的形式打包。适用于纯Java项目,将编译后的类文件打包成一个JAR文件,供其他项目或模块使用。

(2)war表示项目将以WAR(Web Application Archive)包的形式打包。适用于Web应用项目,将Web应用的代码、资源和配置打包成一个WAR文件,可以部署到Servlet容器中。

(3)pom表示项目本身不会生成任何产物,仅作为父模块或聚合项目,用于管理子模块的构建和依赖。

使用module标签将library-admin模块加入父模块中,并声明依赖的版本号,代码如下:

3.子模块依赖修改

修改library-admin项目依赖,打开pom.xml文件修改parent标签,引入父级依赖,命名为library项目。使当前项目可以继承父模块的相关配置,将pom的groupId设置为com.library、将artifactId设置为library、将版本号设置为0.0.1-SNAPSHOT,代码如下:

然后删除Spring Boot Starter依赖和测试依赖,使项目可以直接继承父模块的依赖和配置,代码如下:

pom.xml文件修改完成后,将library-admin的配置文件修改为yml格式,然后添加项目名和端口,可参考4.1.2节,添加完成并启动项目,如果没有启动成功,则可查看控制台提示的错误信息进行相关修改。

4.依赖版本管理

在父模块的pom.xml文件中,使用dependencyManagement标签声明依赖项的版本信息,父模块充当了一个中央配置的角色,为所有子模块提供了集中管理依赖版本的机制。这种方式使子模块无须指定版本号,而是从父模块中自动继承版本信息,确保了所有子模块都使用统一的依赖版本。

通过这种统一的依赖版本管理方式,项目的构建和开发过程变得更加规范和可控。同时,它也确保了依赖版本的一致性,避免了不同子模块因版本不匹配而可能引发的问题和错误,用于版本声明的代码如下:

5.项目Maven配置

在搭建Maven环境时,在Maven的settings.xml文件中添加了一个新的mirror节点,配置了阿里云镜像网址,那个是全局的配置方式。接下来要在项目中配置阿里云镜像网址,只能在当前项目中生效。

修改父模块的pom.xml文件,在repositories节点下加入repository节点,并配置阿里云镜像网址,代码如下:

5.1.2 创建library-common子模块

library-common子模块旨在集中管理项目中的公共资源和实用工具。该模块将涵盖一些公共类的功能,包括Redis实用工具类、各种枚举类型及常用的错误码类等。

通过将这些公共资源和功能模块整合到一个统一的子模块中,总结以下几个优点。

(1)通过将常见的功能集中在一个位置,项目中的不同部分可以轻松地共享和重用这些代码片段,从而减少重复编写代码的工作量。

(2)所有公共资源都集中在一个模块中,更容易对其进行维护和更新。当需要修复漏洞或添加新特性时,只需在一个地方进行修改,从而降低维护成本。

(3)通过在一个模块中定义共享的枚举类型和工具函数,可以确保在整个项目中使用一致的标准,有助于提高代码的可读性和一致性。

在library项目下,新建一个library-common子模块,创建方式和创建library-admin子模块的方式基本一致,只要修改项目名称即可,如图5-5所示。

图5-5 创建library-common子模块

创建项目完成后,删除不必要的代码文件,具体的目录文件如图5-6所示。

图5-6 library-common目录结构

修改pom.xml文件,添加父模块依赖,代码如下:

将library-common子模块的依赖添加到父模块的pom.xml文件中,并声明依赖的版本信息,代码如下:

5.1.3 添加项目配置文件

在开发和管理项目时,配置文件管理是非常重要的,尤其是在不同环境中部署和运行项目时。为了解决本地开发和测试环境与线上环境之间的配置不一致问题,这里要引入3个独立的配置文件,分别用于本地开发环境、测试环境和线上环境。这种方法不仅使项目配置更加规范和清晰,还解决了在不同环境中可能出现的问题。

1.application.yml配置文件

在library-admin项目中,将重新配置application.yml文件,以满足项目的需求。对项目命名及项目使用不同环境的配置进行切换,代码如下:

配置上传文件大小的限制,如果这里不限制,则在用到文件上传时会出现报错,代码如下:

在Spring Boot中默认只有GET和POST两种请求,但是可以使用隐藏请求去替换默认请求,例如,删除使用DELETE请求、修改使用PUT请求等,代码如下:

配置项目的上下文路径,也可以称为项目路径,这是构成请求接口地址的一部分,例如,在项目中有个接口为/library/list,项目端口为8080,然后访问这个接口的URL:localhost:8080/library/list,然后在配置文件中加上了context-path为/api/library之后,再去访问这个接口的URL,就要改成localhost:8080/api/library/library/list才可以正常访问,代码如下:

2.application-dev.yml配置文件

开发项目时,在本地机器上运行项目是一个常见的场景。为了确保项目在机器上能够正常运行,先创建application-dev.yml配置文件。该文件包含适用于开发环境的配置选项。

(1)连接本地开发数据库,以便可以使用本地数据库进行开发和测试。

(2)配置连接本地的Redis缓存。

(3)配置本地项目启动的端口号,这个可以和测试环境及线上的端口号不一致。

如何配置这些信息呢?在接下来的项目中会涉及,这里先配置本地项目启动的端口号,代码如下:

其余的两个配置文件application-test.yml和application-prod.yml先创建好,里面的具体内容在后面部署的章节中再添加。

3.修改项目启动配置

环境的配置文件创建完成后,还需要配置不同环境的profiles才能在不同的环境下切换不同的配置文件。profiles标签用于定义不同环境下的配置,每个profile元素表示一个不同的环境(本地开发环境、测试环境、生产环境),并包含了一些特定环境的配置。

在library-admin子模块的pom.xml文件中添加相关配置,代码如下:

配置Spring Boot Maven插件,使其能够按照指定的方式重新打包项目,将生成的JAR文件存放在ci目录下并设置适当的文件名,代码如下:

到这里项目的基础配置文件已经完成,现在启动项目,如果项目启动成功,则表明配置没有问题,可以继续进行后续的开发。

5.2 整合项目日志

为了实现在项目异常报错、出现问题时可以迅速定位及更精准地监控项目的运行状态,可以采用日志文件记录监控异常的错误信息。使用Log4j2作为日志框架,旨在项目启动时即刻开始记录关键信息,有助于团队形成记录日志的习惯,提升问题追踪和排查的效率。

5.2.1 日志级别

在项目中常用的日志级别有debug、info、warn、error、trace、fatal、off等级别,每个级别的使用方式和概念如下。

(1)debug主要用于开发过程中记录关键逻辑的运行时数据,以支持调试和开发活动。

(2)info用于记录关键信息,可用于问题排查,包括出入参、缓存加载成功等,有助于有效地监控应用状态。

(3)warn用于警告信息,指示一般性错误,对业务影响较小,但仍需减少此类警告以保持稳定性。

(4)error用于记录错误信息,对业务会产生影响。需配置日志监控以追踪异常情况。

(5)trace提供最详细的日志信息,可用于深入分析和跟踪应用的内部流程。

(6)fatal表示严重错误,通常与应用无法继续执行相关,用于标识致命问题。

(7)off关闭日志输出,用于特定情况下暂停日志记录。

合理地选择不同级别的日志记录,可实现对应用状态的全面监控、异常排查和问题追踪,为开发团队提供高效的日常运维支持。

5.2.2 日志使用技巧和建议

在编写代码的过程中,日志记录是不可或缺的,而在项目中日志记录的技巧则显得尤为重要,以下是一些日志使用的技巧和建议。

(1)在多个if-else条件判断时,每个分支首行尽量打印日志信息。

(2)为了提高日志的可读性,建议使用参数占位符{},避免使用字符串拼接“+”。

(3)在使用异常处理块try-catch时,避免直接调用e.printStackTrace()和System.out.println()输出日志,正确写法的代码如下:

(4)异常的日志应完整地输出错误信息,代码如下:

(5)建议进行日志文件分离。针对不同的日志级别,将日志输到不同的文件中,例如,使用debug.log、info.log、warn.log、error.log等文件进行分类记录。

(6)处理错误时,避免在捕获异常后再次抛出新异常,以防重复记录和混淆错误追踪。

5.2.3 添加日志依赖

Log4j2是一个基于Java的日志框架,提供了一种灵活高效的方式来记录应用程序中的日志消息。它是原始Log4j库的进化版本,旨在更加稳健、高性能和功能丰富。Log4j2提供了各种日志功能,包括将日志记录到多个输出、配置日志级别、定义自定义日志格式等,可以更好地控制和管理应用程序的日志记录。

1.添加Log4j2依赖

在父模块的pom.xml文件中添加Log4j2依赖,先在properties中声明依赖的版本号,代码如下:

然后添加日志和Log4j2相关依赖,代码如下:

添加完成后,需要将Spring Boot自带的LogBack去掉,在父模块的pom.xml文件中修改spring-boot-starter依赖,使用Excelusions排除log,代码如下:

2.添加Log4j2配置文件

在子模块library-admin的resource资源目录中,新建一个名为log4j2.xml的配置文件,用于定义日志框架的配置参数、相关信息及存储路径等,代码如下:

3.配置日志输出器

在日志配置文件中有一个Appenders输出器,共要配置两个输出,一个Console在控制台输出;另一个RollingRandomAccessFile设置为文件格式的输出,代码如下:

4.配置日志记录

根据不同的业务功能和应用程序,其日志记录也要使用不同的输出源,可使用Loggers来配置日志的输出,代码如下:

5.查看日志文件

在本节中,已经成功地将Log4j2日志框架整合到了项目中。现在启动项目并检查是否可以启动成功,如果项目能够正常启动,则查看项目根目录下的硬盘是否已生成了/library/logs目录。在该目录下会有两个日志文件:error.log和library.log。打开library.log日志文件,就能够看到项目启动的相关日志已经被记录在其中,如图5-7所示。

图5-7 项目启动日志

5.3 Spring Boot整合MyBatis-Plus

MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,能够帮助开发者简化开发过程、提升开发效率。对于单表的CRUD操作,MyBatis-Plus提供了丰富便捷的API,让开发者可以轻松地实现各种数据操作。此外,MyBatis-Plus还支持多种查询方式和分页功能,并且不用编写烦琐的XML配置,从而大大降低了开发难度,让开发者能够更加专注于业务代码的编写。总而言之,MyBatis-Plus的出现使MyBatis的使用变得更加简单和高效。

5.3.1 为什么选择MyBatis-Plus

本项目使用MyBatis-Plus来简化持久层的操作,使开发更加高效、便捷、易于维护。项目使用MyBatis-Plus主要有以下优势。

(1)强大的CRUD操作,内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求。

(2)MyBatis-Plus是基于MyBatis的增强工具,与MyBatis完美兼容。如果已经使用过MyBatis开发项目,则可以直接将项目升级为MyBatis-Plus,无须做太多改动,这样可以节省迁移成本。

(3)MyBatis-Plus官方提供了详细清晰的文档,对于使用和配置都有详细的说明,方便开发者快速上手。此外,MyBatis-Plus拥有庞大的社区支持,开发者可以通过社区获得帮助、分享经验和获取更多的资料。

(4)支持Lambda形式调用,可以方便地编写各类查询条件,无须再担心字段写错等问题。

5.3.2 整合MyBatis-Plus

MyBatis-Plus 3.0以上版本要求JDK 8及以上版本,现在项目使用的是JDK 17,基本满足官方提出的要求,所以本项目使用MP3.0+的版本。

1.导入依赖

在父模块的pom.xml文件中添加两个依赖,一个是mybatis-plus-boot-starter依赖,此依赖提供了MyBatis-Plus在Spring Boot中的自动配置功能,它会自动集成MyBatis-Plus和Spring Boot,简化了配置过程;另一个是mybatis-plus-extension依赖,此依赖是MyBatis-Plus的扩展模块,提供了额外的功能和工具来增强MyBatis-Plus的能力。例如,分页插件、逻辑删除插件、自动填充插件、动态表名插件等提升开发效率和灵活性,代码如下:

2.编写配置文件

在library-admin模块的application.yml配置文件中添加mybatis-plus的相关配置,代码如下:

本章小结

在本章中构建了两个子模块,并成功地将它们与父依赖的配置关联了起来。同时还集成了Log4j2作为项目的日志框架,用于记录项目运行中的执行日志信息,并深入学习了如何在项目中高效地应用日志记录等功能。此外,项目还顺利地整合了持久层的框架MyBatis-Plus,以简化对数据层的操作。

总之,本章的内容涵盖了多个关键领域,包括项目构建、依赖管理、日志框架的集成及持久层的配置,这些步骤的顺利完成,为接下来的项目开发奠定了良好的基础。 2BXanGj8fNQDhTflZ2BWNh5e7pGk2v4fN/79bTTd9wGkJMHlhXNtn5oOnqrTDKYw

点击中间区域
呼出菜单
上一章
目录
下一章
×