商业软件项目搭建指南(SpringMVC篇)——第七章:项目初始化与底层搭建

本章首先介绍项目需要安装的软件工具和使用的第三方云服务,然后进行创建、初始化项目和搭建项目底层。

目录

第1节、需要安装的软件工具

第2节、需要使用第三方的云服务

第3节、创建和初始化项目

3.1、使用SpringBoot官网初始化项目

3.2、使用IntelliJ IDEA开发IDE初始化项目

第4节、搭建项目底层

4.1、Java源代码主目录

4.2、Java源代码主Java包

4.2、共通Java包

4.3、项目Java包

4.4、项目资源文件主目录

4.5、Test源代码主目录

4.6、测试代码主Java包

4.7、共通测试Java包

4.8、项目测试Java包

4.9、Git版本忽略配置文件

4.10、Maven管理项目配置文件

4.11、自述 Mark Down文件


第1节、需要安装的软件工具

1、Java SDK 8,下载地址:https://www.oracle.com/cn/java/technologies/downloads/#java8。

2、MySQL服务端,我们去下载社区版本(MySQL Community Server),下载地址:https://dev.mysql.com/downloads/mysql/,下载Java和MySQL都需要注册一个Oracle账户,登录之后才能下载。

3、Navicat Premium 16,用于访问MySQL数据库的客户端。

4、UltraEdit,用于打开文本文件和SQL脚本文件。

5、PowerDesigner 16,用于设计数据库表结构和生成SQL脚本文件。

6、Redis缓存服务器,用于缓存数据,下载地址:https://redis.io/download/。

7、Redis Desktop Manager,用于访问Redis缓存数据库的客户端。

8、IntelliJ IDEA 2022.1.4,我们项目的集成开发环境IDE,下载地址:https://www.jetbrains.com/idea/download/#section=windows。

9、Maven,我们项目管理工具,下载地址:https://maven.apache.org/download.cgi。

10、Chrome或者火狐浏览器,用于打开我们开发的网页。

上述这些软件工具,如何进行下载、安装和配置,请自行去百度搜索,网上有大量的教程。

第2节、需要使用第三方的云服务

1、七牛云存储,平台网址:https://www.qiniu.com/,在该平台注册一个开发者账户,可以得到一些基础免费的云存储服务,用于存储图片、视频,可以把图片、视频文件上传到平台,然后能够快速访问对应的图片和视频,特别是对大图片的快速访问。

2、支付宝支付服务,平台网址:https://open.alipay.com/,在该平台注册一个开发者账户,申请各种类型支付服务,可以得到支付宝在线支付、收款服务。

3、微信支付服务,平台网址:https://open.weixin.qq.com/,在该平台注册一个开发者账户,申请各种类型支付服务,可以得到微信支付在线支付、收款服务。

4、阿里云服务,平台网址:https://www.aliyun.com/,在该平台注册一个开发者账户,可以购买大量云服务,比如:云服务器ECS、云数据库、域名注册与备案等等。现在创业公司的软件一般都是部署在云服务器上。

如果需要使用七牛云、支付宝支付和微信支付服务的话,那么我们必须去注册并且备案一个域名,比如我们项目里使用到域名:www.sanqingniao.cn,就是我注册和备案的真实域名。

第3节、创建和初始化项目

我们项目以Spring Boot为基础架构,那么创建和初始化项目有两种方法。

3.1、使用SpringBoot官网初始化项目

打开https://start.spring.io/网站,在该网页里选择相关选项,如下图:

  1. 在Project区域里选择Maven。
  2. 在Language区域里选择Java。
  3. 在Spring Boot区域里选择2.7.11,这里选择最低版本的原因是我们Java是使用8.0版本。
  4. 在Project Metadata区域里填写或选择域名(Group)、项目名(Artifact和Name)、项目描述(Description)、打包方式(Packaging)、Java版本。
  5. 在Dependencies区域里,点击右上角“ADD DEPENDENCIES”按钮,添加我们项目里所用相关开源软件包的依赖,具体有:Spring Boot DevTools、Spring Web、Thymeleaf、MyBatis Framework、MySQL Driver、Spring Data Redis、Java Mail Sender。

然后点击“GENERATE”按钮,就可以创建和初始化本项目,并且下载了一个压缩包,把这个压缩包解压到你的工作目录,然后导入到IntelliJ IDEA开发IDE软件里。以上依赖包是项目初始化的基本依赖包,在后续开发中会陆陆续续地添加开发所需的Maven依赖包代码。

3.2、使用IntelliJ IDEA开发IDE初始化项目

打开IntelliJ IDEA软件,点击“文件--->>新建--->>项目”,打开新建项目窗口,在窗口的左边区域里,选择“Spring Initializr”选择,如下图:

在该窗口里,填入或选择上节里描述的选择项值,然后点击下一步,打开选择SpringBoot版本和依赖包窗口,如下图:

在该窗口里,填入或选择上节里描述的选择项值和依赖包,然后点击“创建”按钮,就可以创建和初始化本项目。

第4节、搭建项目底层

在创建和初始化项目之后,并且在IntelliJ IDEA开发IDE软件里打开它,我们要继续为项目搭建底层架构和代码,其架构图如下:

根据上图,我们从上往下,一个一个目录地说明它们的意义和用处。

4.1、Java源代码主目录

Java源代码主目录是:wfsmw\src\main\java,在该目录里保存我们项目开发的所有Java源代码文件;在该目录的下一级目录是我们项目的主Java包。

4.2、Java源代码主Java包

Java源代码主Java包是:wfsmw\src\main\java\cn.sanqingniao,在实际项目里,为了保证Java文件名和类名的全球唯一性,通常使用公司注册的域名,按照它的组件反向来定义项目的主Java包。例如在我们项目里使用的域名是sanqingniao.cn,那么它的组件反向就是cn.sanqingniao,以此作为我们项目的主Java包。在该主Java包里有两个子包:commons和wfsmw。

4.2、共通Java包

子包commons,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons,我们叫它共通Java包。在实际项目里,通常会定义出一个共通Java包,在该包里保存整个项目里要用到的共通功能类和工具类,以及每个层级的基类。在该共通Java包里有bean、controller、entity、exception、handler、result、security、utils这些子包。它们的意义和用处说明如下。

4.2.1、bean子包

子包bean,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.bean,我们叫它简单JavaBean组件包。在实际项目里,通常会定义出一个简单JavaBean组件包,在该包里保存整个项目里要用到的一些简单JavaBean组件类,用于在每个层级直接传输数据。JavaBean组件的意思是指一个简单Java类,它只有一些属性以及这些属性的set和get方法,不再有其他任何功能方法,主要的目的是携带数据,可以在不同层级或互联网网络里传输数据。

4.2.2、controller子包

子包controller,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.controller,我们叫它控制器基包。我们项目是Web项目,因此在实际项目里,通常会定义出一个控制器基包,在该包里保存整个项目的控制器层级的基类,该基类名通常命名为BaseController;在该控制器基类里编写控制器层级的共通功能方法。在控制器基包里,也会存放一些共通功能的控制器类,例如我们项目里有CommonsController、HeartBeatController和PublicKeyController这三个控制器类;在CommonsController编写了一些共通页面功能方法,比如:获取图片验证码接口、获取登录已超时或未登录提醒页面和获取系统发生错误提醒页面等等;在HeartBeatController里编写了一个获取系统状态功能方法,它的用处是系统外部的监视器,通过定时访问这个接口,来监听系统是否在正常运行,我们通过叫它系统心跳接口;在PublicKeyController里编写了在页面上要进行RSA加密的获取公钥接口,通常用在注册和登录页面时对密码进行加密。

4.2.3、entity子包

子包entity,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.entity,我们叫它实体基包。在实际项目里,通常会定义出一个实体包,在实体包里每个实体类一一对应一张数据库表,实体类的属性一一对应数据库表的字段,一个实体类对象一一对应数据库表里一条数据。当然在当前实体基包里,保存整个项目的实体层级的基类,该基类名通常命名为BaseEntity;在该实体基类里定义了所有实体类的共同属性,例如:关于分页功能的一些属性页码(page)、每页数量(pageSize)、获取第一个记录的下标(firstResult)、获取数量(fetchSize)等等。

4.2.4、exception子包

子包exception,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.exception,我们叫它异常类包。在实际项目里,通常会定义出一个异常类包,在该包里保存整个项目的自定义异常类,根据不同业务需要定义相应的异常类,在相关业务执行过程中如果发生不符合实际业务时,就可以主动使用、抛出对应的异常。在我们的项目里定义了DataAccessException、GlobalExceptionResolver、ParameterException这三个异常类。

异常类DataAccessException的意义和用处是在把业务数据保存到数据库时,如果发生不符合实际业务,那么主动使用、抛出对应的异常,以便回滚数据库事务、保持数据的完整性。

异常解析器类GlobalExceptionResolver的意义和用处是当系统发生了异常,但又没有捕捉处理的情况下,该异常解析器类就会处理这些异常,并且给非常友好的提醒信息,比如显示异常结果页面,以便防止出现那种一堆异常栈、使非技术人员看不懂的错误信息。

异常类ParameterException的意义和用处是在前端页面提交的各种参数值到服务端时,检查这些参数是否合法;如果不合法,就会抛出这个异常告知前端页面。

4.2.5、handler子包

子包handler,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.handler,我们叫它业务处理器类包。业务处理器的意思是指当系统需要向第三方系统获取功能服务时,会编写一个业务处理器类,封装第三方系统提供的功能服务业务执行流程,本系统只需要简单调用该业务处理器,就可以获取相关功能服务,比如在我们项目里使用到的七牛云存储服务、支付宝支付服务和微信支付服务。

4.2.6、result子包

子包result,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.result,我们叫它JSON结果类包。在我们项目提供的Web服务里,有一些接口返回的结果数据结构是JSON数据结构,为了统一数据结构,定义了一个共通的Result结果类,方便在任何接口里使用。

4.2.7、security子包

子包security,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.security,我们叫它安全包。在该包里,保存了一些用于封装加密、解密的工具类,比如:AES、RSA加密算法。

4.2.8、utils子包

子包utils,其全路径是:wfsmw\src\main\java\cn.sanqingniao.commons.utils,我们叫它工具类包。在实际项目里,通常会定义出一个工具类包,在该包里保存整个项目的自定义工具类,根据不同业务需要定义相应的工具类。在我们的项目里定义了CommonUtils、Constants、DateUtils、JsonUtils、StringUtils等等一些常用工具类。

4.3、项目Java包

子包wfsmw,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw,是我们主项目Java包。在实际项目里,通常会定义出一个主项目Java包,在该包里保存整个项目里所有业务代码。在该主项目Java包里有controller、dao、entity、interceptor、service、utils这些子包。它们的意义和用处说明如下。

4.3.1、controller子包

子包controller,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.controller,我们叫它控制器包。我们项目是Web项目,因此在实际项目里,通常会定义出一个控制器包,在该包里保存整个项目的控制器层级的控制器类;在该包里,会根据项目模块各自独立再定义一层控制层包,例如在我们项目里有admin、basedata、commons、goods、member、order、site这些模块,因此定义了相应的子包。

在控制器controller包里,在实际项目中,通常会定义出整个项目的一个项目全局控制器基类,所有其他控制器类都必须继承它;在该基类里通常编写一些在控制器层级的共通功能方法,比如:设置保存到Session范围的对象值的键、读取国际化消息文件里的消息方法、新增日常日志方法、保存数据到Cookies里的方法等等。

在我们项目里,定义了WfsmwBaseController这个全局控制器基类,它是所有其他控制器类的父类。我们项目是一个Web项目,因此主要分后台管理和前端及会员管理两大部分;为了统一后台管理访问URL,我们还定义了一个后台管理部分的控制器基类AdminBaseController,以便后台管理部分的所有控制器类都必须继承它。

4.3.2、dao子包

子包dao,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.dao,我们叫它数据访问对象包。在实际项目里,通常会定义出一个数据访问对象包,在该包里保存整个项目的数据库访问层级的数据访问对象类;在该包里,会根据项目模块各自独立再定义一层数据库访问层包,例如在我们项目里有basedata、goods、log、order、site、user这些模块,因此定义了相应的子包。

在数据访问对象dao包里,在实际项目中,通常是根据数据库架构来进行定义的。在设计数据库表结构时,通常也是一样分模块进行设计的。在我们项目里,我们是基于Mybatis开源框架进行数据库访问的,因此在dao包里保存的都是一些接口,一个接口对应一张数据库表。

4.3.3、entity子包

子包entity,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.entity,我们叫它数据实体包。在实际项目里,通常会定义出一个数据实体包,在该包里保存整个项目的数据库实体层级的数据实体类;在该包里,会根据项目模块各自独立再定义一层数据实体层包,例如在我们项目里有basedata、goods、log、order、site、user这些模块,因此定义了相应的子包。

在数据实体entity包里,在实际项目中,定义的所有实体类都必须继承共通Java包里实体基类BaseEntity。

4.3.4、interceptor子包

子包interceptor,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.interceptor,我们叫它拦截器包。在实际项目里,通常会定义出一个拦截器包,在该包里保存整个项目的拦截器类。拦截器的意思是指在执行实际业务之前或之后,进行自动拦截,增加一些控制,比如数据库事务控制、记录访问日志控制、登录认证控制、访问权限控制等等。

在我们项目里,开发了一个登录认证控制,类名为:UserLoginInterceptor,主要拦截访问后台管理和会员中心这个部分的功能页面,检查必须是在登录之后才可以访问,否则就跳转到登录页面,要求登录。其中后台管理访问URL拦截规则为“/admin/*/**”,会员中心访问URL拦截规则为“/member/*/**”;这也就是为什么后台管理部分的控制器类必须继承控制器基类AdminBaseController的原因,方便设置统一的访问URL;同理会员中心部分的所有控制器类必须继承AbstractMemberController。

4.3.5、service子包

子包service,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.service,我们叫它业务包。在实际项目里,通常会定义出一个业务包,在该包里保存整个项目的业务层级的业务服务类;在该包里,会根据项目模块各自独立再定义一层业务层包,例如在我们项目里有basedata、goods、member、log、order、site、user这些模块,因此定义了相应的子包。

在业务包里,在实际项目中,会定义一个业务服务基类,实现一些在业务层的共通功能方法,其他所有业务服务类都必须继承它。在我们项目里,定义了名叫BaseService类,其他业务服务类都会继承它。

4.3.6、utils子包

子包utils,其全路径是:wfsmw\src\main\java\cn.sanqingniao.wfsmw.utils,我们叫它工具包。在实际项目里,通常会再定义出一个项目范围内的utils包,在该包里保存整个项目的各种工具类,例如我们项目里FunctionConstant、GoodsCategoryComparator、WfsmwConstant、WfsmwUtils这些工具类。

FunctionConstant是一个功能ID值常量接口,定义项目每个功能的ID值,以便在权限控制和记录访问日志时使用。

GoodsCategoryComparator是一个简单的比较器类,以商品分类序号倒序进行比较的比较器类,用于对商品分类列表进行排序。

WfsmwConstant是一个本项目范围内的常量接口,定义本项目里的一些枚举常量值。

WfsmwUtils是一个本项目范围内的工具类,定义本项目里的一些功能方法。

4.4、项目资源文件主目录

项目资源文件主目录是:wfsmw\src\main\resources,在该目录里保存我们项目开发的所有资源文件和配置文件;在该目录的下一级目录是根据项目的各种不同业务定义的,它们有config、messages、mybatis、static、templates这些子目录,以及auto_restart.txt和log4j.properties这个资源文件。它们的意义和用处说明如下。

4.4.1、config子目录

子目录config,其全路径是:wfsmw\src\main\resources\config,在该目录保存了Spring Boot架构的配置文件。为了支持多环境配置,在我们项目中,在该目录里,添加了四个配置文件,分别为:application.properties、application-dev.properties、application-prod.properties、application-test.properties。

这个application.properties配置文件是Spring Boot架构的默认配置文件,在该文件里我们只配置了Spring Boot的热部署和多环境相关配置,其它配置项都放在环境配置文件里。

这个application-dev.properties配置文件是开发环境配置文件,在该文件里我们配置开发环境对应的配置项值。

这个application-prod.properties配置文件是生产环境配置文件,在该文件里我们配置生产环境对应的配置项值。

这个application-test.properties配置文件是测试环境配置文件,在该文件里我们配置测试环境对应的配置项值。

所谓多环境配置的意思,请查看如下说明。

4.4.1.1、多环境配置

多环境配置是指在同一个应用程序中,针对不同的环境(如开发环境、测试环境、生产环境等)进行不同的配置,以便应用程序能够在不同的环境中正常运行。这种方式可以避免在部署和测试时需要手动修改配置文件的麻烦,并且可以减少错误发生的可能性。

通常情况下,多环境配置会涉及到以下几个方面:

1. 数据库连接信息:针对不同的环境,需要配置不同的数据库连接信息,以便应用程序能够连接到正确的数据库。

2. 日志级别:在开发和测试阶段,通常需要开启较高的日志级别以便进行调试。而在生产环境中,则需要将日志级别调整为较低水平,以避免过多的日志信息对性能造成影响。

3. 缓存策略:在不同的环境中,缓存策略可能会有所不同。例如,在开发和测试阶段可以采用较短时间的缓存策略以方便调试和测试;而在生产环境中,则需要采用更为稳定和可靠的缓存策略。

4. 安全策略:在不同的环境中,安全策略可能会有所不同。例如,在开发阶段可以采用较宽松的安全策略以方便调试和测试;而在生产环境中,则需要采用更为严格和安全的策略以保证应用程序安全性。

通过多环境配置,可以使应用程序更加灵活、可维护、易部署,并且提高了应用程序开发和部署过程中效率。

4.4.2、messages子目录

子目录messages,其全路径是:wfsmw\src\main\resources\messages,在该目录保存了用于国际化的消息属性文件。例如:保存中文消息属性文件messages_zh_CN.properties。

4.4.3、mybatis子目录

子目录mybatis,其全路径是:wfsmw\src\main\resources\mybatis,在该目录保存了Mybatis持久层框架的配置文件generatorConfig.xml和mybatis-config.xml,以及mapper子目录。

对于generatorConfig.xml配置文件,它的用意是为了使用MyBatis反向生成代理插件的配置文件,其目的是为了根据数据库表结构反向自动生成Entity实体类、Dao接口、Mybatis SQL脚本映射XML文件,一张表结构对应反向自动生成这三种源代码文件。

对于mybatis-config.xml配置文件,它的用意是设置Mybatis在运行时的一些配置项值。例如:cacheEnabled代表全局映射器是否启用缓存、useGeneratedKeys代表是否允许自动创建每条记录的键值。

对于mapper子目录,在它里保存访问数据的SQL脚本映射XML文件,一张数据库表对应一个映射XML文件,该映射XML文件名对于Dao接口类名。

4.4.4、static子目录

子目录static,其全路径是:wfsmw\src\main\resources\static,在该目录保存了本项目里的所有CSS文件、图片和JS文件,它有css、images、js、ueditor这些子目录。

对于css子目录,在它里保存了本项目里的所有CSS文件。

对于images子目录,在它里保存了本项目里的所有图片文件。

对于js子目录,在它里保存了本项目里的所有JS文件。

对于ueditor子目录,在它里保存了本项目里使用的第三方开源的UEditor富文本编辑器的所有CSS文件、图片和JS文件等等各种文件。

4.4.5、templates子目录

子目录templates,其全路径是:wfsmw\src\main\resources\templates,我们叫它视图模板目录,在该目录保存了本项目视图层的所有模板HTML文件。在实际项目里,通常会定义出一个视图模板目录,在该目录里保存整个项目的视图层级的模板HTML文件;在该目录里,会根据项目模块各自独立再定义一层视图层目录,例如在我们项目里有admin、commons、goods、member、module、order、site这些模块,因此定义了相应的子视图模板目录。

对于admin子目录,在它里保存了本项目里的管理员管理页面、会员管理页面、主页面和登录页面模板HTML文件。

对于commons子目录,在它里保存了本项目里的共通功能页面、共通模块模板HTML文件。

对于goods子目录,在它里保存了本项目里的商品管理页面和商品分类管理页面模板HTML文件。

对于member子目录,在它里保存了本项目里的会员中心部分所有页面模板HTML文件。

对于module子目录,在它里保存了本项目里的模块数据管理页面模板HTML文件。

对于order子目录,在它里保存了本项目里的订单管理页面模板HTML文件。

对于site子目录,在它里保存了本项目里的网站前端展现的所有展现页面模板HTML文件。

4.4.6、热部署触发文件

热部署触发文件auto_restart.txt,其全路径是:wfsmw\src\main\resources\auto_restart.txt,该文件是Spring Boot支持的DevTools技术热部署触发文件,只有在修改这个文件时,本项目才会自动重新加载之前新增和修改的源代码文件。所谓热部署的意思,请查看如下说明。

4.4.6.1、Spring Boot的热部署

Spring Boot的热部署是指在应用程序运行的过程中,不需要重新启动应用程序,就可以动态地修改应用程序的代码或资源,并且使修改后的代码或资源立即生效,而不需要重启应用程序。这样可以提高开发效率和调试效率。

传统的Java应用程序需要在每次修改后重新编译和打包,并且需要重新启动整个应用程序才能看到修改后的效果。而使用Spring Boot的热部署技术,则可以在开发阶段快速地进行代码和资源的修改和测试。

Spring Boot支持多种热部署技术,包括基于类加载器的热部署(如Spring Loaded、JRebel等)以及基于文件系统监控的热部署(如Spring Boot DevTools等)。无论使用哪种技术,Spring Boot都可以帮助开发者实现快速、高效、便捷地进行开发和测试。目前在我们项目里使用Spring Boot DevTools热部署技术。

4.4.7、日志配置文件

日志配置文件log4j.properties,其全路径是:wfsmw\src\main\resources\log4j.properties,在本项目里使用log4j日志架构来实现记录日志功能,那么该配置文件就是设置一些输出日志的各种配置项值。该配置文件里的配置项意义,请查看如下说明。

4.4.7.1、log4j配置项说明

log4j是一款流行的Java日志框架,其配置相对简单且具有较强的可扩展性,下面是log4j日志架构的配置说明:

1. 配置日志级别

在log4j中,有以下5个日志级别:TRACE、DEBUG、INFO、WARN和ERROR。可以根据实际需求设置不同的级别。例如,可以在开发和测试阶段设置DEBUG级别,以便进行调试;而在生产环境中,则应该将日志级别设置为INFO或以上。

可以使用rootLogger来配置全局日志级别,例如:

log4j.rootLogger=DEBUG, stdout, file

其中,rootLogger为根日志记录器,DEBUG为全局日志级别,stdout和file是输出目标。

2. 配置输出目标

log4j支持将日志输出到控制台、文件、数据库等不同的输出目标。可以使用appender来配置不同的输出目标。例如:

# 输出到控制台

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 输出到文件

log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=/path/to/log/file.log

log4j.appender.file.MaxFileSize=10MB

log4j.appender.file.MaxBackupIndex=10

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

上述代码中定义了两个appender:stdout和file。其中stdout输出到控制台,file则将日志记录到文件中。

3. 配置日志格式

在appender中还可以定义layout来格式化日志记录内容。例如:

# 控制台输出格式化配置

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# 输出时间、线程名、类名等信息,并以%n分隔多条信息。

# 具体信息可以参考PatternLayout文档。

# %d 输出时间日期串,%p输出优先级,%t输出线程名,%c输出类名,%L行号,%m输出信息,%n是换行符  

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 文件输出格式化配置

 log4j.appender.file.layout=org.apache.log4j.PatternLayout

 logFileApp.logger.additivity=false

 logFileApp.logger.debugEnabled=true

 logFileApp.logger.infoEnabled=true

 logFileApp.logger.errorEnabled=true

 logFileApp.logger.fatalEnabled=true

 #指定消息内容打印方式和样式  

 logFileApp.logger.pattern=[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%t] [%c:%L] [%M] :%n%m%n   

上述代码中使用了PatternLayout来进行格式化,并定义了日期、优先级、线程名等信息的输出方式。

总之,在使用log4j进行配置时需要根据实际需求灵活设置不同的参数来达到最佳效果。

4.5、Test源代码主目录

Test源代码主目录是:wfsmw\src\test\java,在该目录里保存我们项目开发测试代码的所有Java源代码文件;在该目录的下一级目录是我们项目的测试代码主Java包。

4.6、测试代码主Java包

测试代码主Java包是:wfsmw\src\test\java\cn.sanqingniao,在实际项目里,为了保证Java文件名和类名的全球唯一性,通常使用公司注册的域名,按照它的组件反向来定义项目的主Java包。例如在我们项目里使用的域名是sanqingniao.cn,那么它的组件反向就是cn.sanqingniao,以此作为我们项目测试代码的主Java包。在该主Java包里有两个子包:commons和wfsmw。

4.7、共通测试Java包

子包commons,其全路径是:wfsmw\src\test\java\cn.sanqingniao.commons,是我们共通测试Java包。在该包里保存整个项目里所有共通功能的测试代码。

4.8、项目测试Java包

子包wfsmw,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw,是我们主项目测试Java包。在实际项目里,通常会定义出一个主项目测试Java包,在该包里保存整个项目里所有业务测试代码。在该主项目测试Java包里有controller、dao、entity、service、utils这些子包。它们的意义和用处说明如下。

4.8.1、controller测试子包

子包controller,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw.controller,我们叫它控制器测试包。在该包里,会根据项目模块各自独立再定义一层控制层测试包,例如在我们项目里有admin、basedata、commons、goods、member、order、site这些模块,因此定义了相应的测试子包。

4.8.2、dao测试子包

子包dao,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw.dao,我们叫它数据访问对象测试包。在该包里,会根据项目模块各自独立再定义一层数据库访问层测试包,例如在我们项目里有basedata、goods、log、order、site、user这些模块,因此定义了相应的测试子包。

4.8.3、entity测试子包

子包entity,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw.entity,我们叫它数据实体测试包。在该包里,会根据项目模块各自独立再定义一层数据实体层测试包,例如在我们项目里有basedata、goods、log、order、site、user这些模块,因此定义了相应的测试子包。

4.8.4、service测试子包

子包service,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw.service,我们叫它业务测试包。在该包里,会根据项目模块各自独立再定义一层业务层测试包,例如在我们项目里有basedata、goods、member、log、order、site、user这些模块,因此定义了相应的测试子包。

4.8.6、utils测试子包

子包utils,其全路径是:wfsmw\src\test\java\cn.sanqingniao.wfsmw.utils,我们叫它工具测试包。在该包里保存整个项目的各种工具测试类。

4.9、Git版本忽略配置文件

Git版本忽略配置文件.gitignore,其全路径是:wfsmw\.gitignore,是Git版本管理软件的忽略版本管理的配置文件,在该文件里添加的文件路径和文件夹路径及其它们的通配符,表示这些文件及其文件夹里的所有文件,都不会被Git管理。

4.10、Maven管理项目配置文件

Maven管理项目配置文件pom.xml,其全路径是:wfsmw\pom.xml,是Maven管理我们项目所有依赖代码的配置文件,在该文件里添加项目所依赖的第三方开源包的Maven配置代码。

4.11、自述 Mark Down文件

自述Mark Down文件README.md,其全路径是:wfsmw\README.md,是我们项目自我介绍的MD文件,在该文件里添加项目一些简单介绍,比如:技术介绍、使用说明等等。Mark Down标记语言介绍,请查看如下简介。

4.8.1、Mark Down

Markdown是一种轻量级的标记语言,用于编写纯文本格式的文档。它的语法简洁明了,易于阅读和编写,可以在几乎所有的文本编辑器中使用。

Markdown语法包括以下内容:

1. 标题:使用#号表示标题级别,例如#一级标题、##二级标题等。

2. 段落:用空行分隔两个段落。

3. 加粗和斜体:用两个星号或下划线包含文字表示加粗,用一个星号或下划线包含文字表示斜体。

4. 列表:有序列表使用数字加点表示,无序列表使用星号或减号表示。

5. 链接:用方括号包含链接文字,用小括号包含链接地址。

6. 图片:与链接类似,只需在方括号前加一个感叹号即可。

7. 引用:使用大于号表示引用文本。

8. 代码块:用三个反引号包含代码块内容,或者在代码前加四个空格或一个制表符表示行内代码。

Markdown可以生成HTML、PDF等多种格式的文档,并且在很多平台和应用程序中得到广泛应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ruby01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值