稻草人项目--项目前期准备

目录

稻草人项目:

稻草人项目流程演示:

稻草人项目功能实现组件及工作原理:

创建数据库表格及表字段名称:

1. 项目前期准备--学习创建Maven聚合项目

1.1. 创建聚合项目

1.2. 通过父项目的配置使得各子模块项目都可以使用同样的依赖

1.3. 在父级项目中配置子级项目可选的依赖

2. 项目前期准备--学习创建SpringBoot聚合项目

2.1. 创建父级项目

2.2. 创建子项目

3. 使用SLF4j打印日志


稻草人项目:

稻草人项目流程演示:

稻草人项目功能实现组件及工作原理:

创建数据库表格及表字段名称:

-- 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个界面中,填写GroupArtifactType选择为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的各方法时,输出的内容可以使用{}作为占位符(括号中间没有内容),后续使用可变参数添加占位符对应的值,例如:

猜你喜欢

转载自blog.csdn.net/c202003/article/details/107317420