目录
1.2. 通过父项目的配置使得各子模块项目都可以使用同样的依赖
稻草人项目:
稻草人项目流程演示:
稻草人项目功能实现组件及工作原理:
创建数据库表格及表字段名称:
-- MySQL dump 10.13 Distrib 5.7.15, for osx10.11 (x86_64)
--
-- Host: localhost Database: straw
-- ------------------------------------------------------
-- Server version 5.7.15
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) UNIQUE NOT NULL COMMENT '用户名',
`nickname` varchar(20) NULL COMMENT '昵称',
`password` char(68) NOT NULL COMMENT '密码',
`gender` int(1) COMMENT '性别',
`day_of_birth` date COMMENT '生日',
`phone` varchar(20) COMMENT '电话号码',
`class_id` int(11) COMMENT '所属班级id',
`created_time` datetime COMMENT '注册时间',
`enabled` int(1) COMMENT '账号是否可用,0-否,1-是',
`locked` int(1) COMMENT '账号是否锁定,0-否,1-是',
`type` int(1) COMMENT '0-学生,1-老师',
`self_introduction` varchar(255) COMMENT '自我介绍',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2020-07-01 16:30:32
1. 项目前期准备--学习创建Maven聚合项目
1.1. 创建聚合项目
先创建一个普通的Maven项目:
然后,填写项目名称与组织ID:
当项目创建成功后,默认会打开pom.xml,在该文件中添加配置:
<packaging>pom</packaging>
例如:
完成后,该项目作为父级项目,可以暂时不处理了,接下来,对父级项目的名称点鼠标右键,再创建子级项目,创建的菜单命令是New
> Module
:
创建Module(模块)项目时,依然选择Maven项目,在详细配置界面,需要:
-
确定Parent项目;
-
自定义name,推荐使用“父级项目名-”作为前缀;
-
填写GroupId;
-
检查Location。
例如:
当子模块创建出来后,在左侧的项目管理面板可以看到子模块项目:
并且,在父项目的pom.xml中已经自动添加了<modules>
节点,且将子模块项目配置进来了:
子模块项目也有自己独立的pom.xml,可以看到,已经将父级项目配置进来了:
然后,再使用同样的步骤,创建出第2个子模块项目shop-order
:
1.2. 通过父项目的配置使得各子模块项目都可以使用同样的依赖
在父级项目的pom.xml中添加依赖及相关配置:
则各个子模块项目就不需要添加junit
依赖,而可以直接使用junit
进行单元测试了:
1.3. 在父级项目中配置子级项目可选的依赖
如果某些依赖只是部分子模块项目需要使用,有另一些子模块项目并不需要使用的,为了便于整体统一管理,应该在父项目的pom.xml中通过<dependencyManagement>
节点进行配置,使用该节点配置的依赖,子项目是不可以直接使用的:
如果直接在子项目中尝试使用该依赖的类,将会出错:
假设是shop-order子模块项目需要使用MySQL的依赖,需要在子模块项目的pom.xml中添加依赖,但是,添加依赖时,不需要指定版本:
然后,更新Maven(点刷新按钮)后再次进行测试:
至此,该子项目就可以使用MySQL的依赖了!
使用这种做法,就不必要求子项目管理各依赖的版本,所有的版本管理全部集中在父项目中即可!当然,子项目如果一定要使用其它版本,也可以自行添加<version>
节点来指定。
另外,在以上操作步骤中,shop-user子模块项目并没有添加MySQL的依赖,所以,当执行同样的测试时,肯定是会出错的!
2. 项目前期准备--学习创建SpringBoot聚合项目
2.1. 创建父级项目
先创建父级项目,在创建项目的第1个面板的左侧选中Spring Initializr
,在右侧确定可用的URL,并点击确定:
在第2个界面中,填写Group和Artifact,Type选择为Maven POM
,其它选项不要求修改,直接确定即可:
在第3个界面中,可以选择依赖,由于这个父项目暂时不确定需要使用哪些依赖,可以先不勾选,后续自行补充也行。
在第4个界面中,主要确定存储项目文件的位置是否正确,全部无误后,则完成创建过程!
2.2. 创建子项目
对父项目点击鼠标右键,选择New
> Module
,在创建子模块项目的第1个界面中依然选择Spring Initializr
,在第2个界面中确定子模块项目的信息,需要注意,当子模块项目的Artifact值中存在减号时,默认的Package值中是把减号两侧的名称直接连接起来的,建议自行补充小数点进行分隔:
在第3个界面中根据需要来勾选依赖,假设希望这个子项目可以被部署到Tomcat,则可以勾选Spring Web
依赖(各依赖也可以在创建成功之后再补充):
在第4个界面中,确定没有问题,则直接创建完成。
创建完成后,在子模块项目的pom.xml文件中可以看到其父项目依然是SpringBoot项目,而不是之前创建的blog项目:
则需要将此处的父项目改为blog项目(打开父项目的pom.xml文件找到相关信息后复制并粘贴到子模块项目中):
同时,父项目中并没有自动添加<modules>
节点来配置子模块项目,需要手动添加(另外,此时在父项目中并不需要<dependencies>
节点和<build>
节点,可以自行删除):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.tedu</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>blog</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>blog-user</module>
<module>blog-comment</module>
</modules>
</project>
全部完成后,使用同样的操作手法,另创建一个子模块项目blog-comment。
需要注意,由于2个子模块项目都是可以直接运行的,当添加了Spring Web
依赖后,都可以直接启动Tomcat,且默认都是占用8080
端口,所以,为了避免冲突,应该显式的将这些子模块项目的端口改为不一样的!
3. 使用SLF4j打印日志
使用SLF4j可以自定义输出日志,类似于使用System.out.println()
输出一些内容,使用SLF4j的好处在于执行效率偏高,并且可以自定义日志级别,以至于可以筛选日志(使得级别较低的日志将不会被显示出来)。
在使用SLF4j时,推荐与lombok
一起使用,应该先添加lombok
的依赖,由于该依赖可能在若干个子模块项目中都需要使用,可以直接将这个依赖添加在父项目中:
接下来,可以在任一子模块项目中测试使用SLF4j:
在SLF4j中,日志的级别从低到高为:
-
TRACE:跟踪信息;
-
DEBUG:调试;
-
INFO:一般信息;
-
WARN:警告,一般是代码质量不高导致的,例如使用了声明为过期的API,或者流对象没有关闭等;
-
ERROR:错误,一般并不会导致项目崩溃;
-
FATAL:致命错误,会导致项目崩溃;
-
OFF:关闭所有日志的输出。
可以在项目的application.properties中配置日志的输出级别:
logging.level.cn.tedu.blog.user=trace
以上配置信息表示配置日志级别(logging.level
),且设置的是cn.tedu.blog.user
包,表示当前项目中这个包及其所有子孙包中的类输出日志后,都按照trace
级别来显示,则trace
及更高级别的日志都将被显示!
以上配置信息中,包名的右侧还可以添加类名,表示只配置某个类的日志显示级别。
当设置为trace
级别后,各级别的日志都可以输出显示,一般,在开发阶段,都直接设置为trace
级别即可,并且,在开发时,应该区分使用log
的方法,比较敏感的信息应该使用debug
方法来输出,当项目开发完成,需要部署到服务器上时,建议设置为warn
(警告)或更高级别,则较低级别的日志在正式服务器的运行过程中并不会被显示出来!
在调用log
的各方法时,输出的内容可以使用{}
作为占位符(括号中间没有内容),后续使用可变参数添加占位符对应的值,例如: