1.Spring Boot 聚合项目
1.1 什么是聚合项目?
一般来讲,一个大型项目会拆分成多个模块来开发,好处是每个模块只需要编写自己相关的代码,和其它模块的代码并不干扰,当前模块也不会出现其它模块的包和类,这么做可以专心的开发自己的功能和代码,不会担心其它模块的干扰。
使用聚合项目实现上面的功能,最终效果是创建一个父项目,父项目中可以根据模块设计,创建多个聚合子项目,每个子项目一般编写和处理一个模块的功能。
注意:聚合项目的功能的Maven提供的
1.2 创建聚合项目步骤
(1)创建父项目jd
File---New---Project,选择Spring Initializr,Next
设置Group、项目名Artifict、Type选择Maven POM、Java Version:8
默认,什么都不选
点击Finish,完成项目创建
jd项目创建完毕之后,修改pom.xml文件如下:当前jd项目是一个父项目,只提供结构和通用的依赖,不写任何代码(删除dependencies(依赖)、build(导出jar包)等内容),代码都写在子项目中。
<?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.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--父项目详细信息:下面三行-->
<groupId>cn.tedu</groupId>
<artifactId>jd</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jd</name>
<description>Demo project for Spring Boot</description>
<!--聚合项目-->
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
</project>
(2)创建子项目jd-shop
选中父项目jd单击右键-->new-->new Module,选择Spring Initializr
设置Group、项目名Artifict、Java Version:8、Package包添加.
默认,什么都不选
点击Finish,完成项目创建
创建出子项目之后要进行"父子相认",在父项目的pom.xml文件中编写:
<packaging>pom</packaging>
<!-- ↓↓↓添加子项目↓↓↓ -->
<modules>
<module>jd-shop</module>
</modules>
<properties>
<java.version>1.8</java.version>
</properties>
子项目的pom.xml文件修改
<?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>cn.tedu</groupId>
<artifactId>jd</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.tedu</groupId>
<artifactId>jd-shop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jd-shop</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
父子相认完成!
2.达内知道项目概述
我们项目开发的是一个类似百度知道的问答系统:达内知道,原名稻草问答
2.1 主要功能介绍
2.2 主要使用技术
我们先开发单体项目版本,后修改扩展为微服务的版本,期间使用到很多流行技术,尤其是微服务的知识点是现在面试热度较高的。微服务中像SpringCloud、nacos、gateway、redis、Kafka\RocketMQ、Elasticsearch这些组件都有详细的讲解和使用。
2.3 静态页面展示
2.4 最终模块结构
3.创建knows项目
https://gitee.com/jtzhanghl/knows2105.git
3.1 创建一个新的项目knows,用做父项目
步骤同上,注意:Artifict:knows、Type选择Maven POM
3.2 修改父项目pom.xml
现在企业中流行的Spring Boot版本在2.2.x~2.3.x之间,新出的版本企业中使用的并不多,而且我们配套的开发设置和软件也都是在2.3.x中来调试的,如果使用2.4.x以上的版本会报错!所以我们必须将pom.xml文件引用的Spring Boot版本修改为2.3.x。可以删除无用的build(导出jar包用)、dependencies(组件依赖),后面用的时候再添加!
<?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>
<!--修改Spring Boot版本,建议:2.3.0、4、【7】、10、【12】-->
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.tedu</groupId>
<artifactId>knows</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>knows</name>
<description>Demo project for Spring Boot</description>
<!--聚合项目-->
<packaging>pom</packaging>
<modules>
</modules>
<properties>
<java.version>1.8</java.version>
</properties>
</project>
刷新Maven,出现问题查看Maven解决方案!
3.3 创建knows-portal项目用作子项目
portal是门户的意思,是我们开发的单体项目,创建步骤同上,注意:Artifict:knows-portal、Package“cn.tedu.knows.portal(中间加.)
3.4 进行父子项目相认
父项目:
<modules>
<!--添加子项目-->
<module>knows-portal</module>
</modules>
子项目:删除无用的properties(均在父项目中定义版本,由父项目统一管理版本号,方便维护)、dependencies、build,添加需要用的dependencies
<?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>cn.tedu</groupId>
<artifactId>knows</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.tedu</groupId>
<artifactId>knows-portal</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>knows-portal</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--包含SpringBoot启动器和Web开发相关依赖(Tomcat等)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
刷新Maven,出现问题查看Maven解决方案!(项目依赖添加完毕后,只需要最后一次刷新maven即可)
4.部署静态资源
原型网页中的内容全部复制(一共20个),复制到项目中resources文件夹下面的static文件夹(没有则创建)中,需要等待一段时间(电脑配置越差,需要时间越长),加载完成后,启动当前项目(KnowsPortalApplication),访问路径为:localhost:8080/login.html,注意:自己电脑8080端口,被占用,需要在application.properties里面配置端口为8888:server.port=8888,因此访问路径为:http://localhost:8888/login.html。访问该路径后,响应如下页面,表示项目启动成功!
如果项目启动正常,但是不出现页面可以尝试Rebuild项目;
如果显示之前的网页,要清空缓存再刷新(Shift+F5)。
5.导入数据
数据库表简介:
将提供给大家的knows_v4.sql文件中的内容全部复制,粘贴到HeidiSql软件中的查询面板中
直接运行,运行后提示有56个警告,点击确定即可
运行后刷新数据库检查数据是否新增成功
出现上述数据,证明数据库表创建成功!
6.Lombok生成代码
lombok是一个非常好用的工具,它可以帮助我们封装数据的类自动生成get/set方法、生成构造方法、生成toString、equals、hashCode等方法的重写。下面就是使用lombok前后同一个类的代码:
6.1使用lombok
使用lombok要在Idea中安装一个插件,然后添加依赖,之后在代码中使用。
安装插件
安装好后要重启Idea。
打开网址:https://plugins.jetbrains.com/plugin/6317-lombok/versions,选择对应版本下载安装即可。
idea直接匹配对应版本:
点击Install to IntelliJ IDEA 2020.1,出现Success
idea接收响应,进行安装即可,之后重启idea即可使用!
在子项目knows-portal的pom.xml中添加依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
刷新Maven,出现问题查看Maven解决方案!
6.2 编写代码测试
在cn.tedu.knows.portal下新建包vo,包中创建类Message
package cn.tedu.knows.portal.vo;
import lombok.Data;
//编写@Data注解,使用lombok工具
@Data
public class Message {
private Integer id;
private String content;
private String name;
}
在KnowsPortalApplicationTests.java编写测试代码,进行测试,测试代码如下:
package cn.tedu.knows.portal;
import cn.tedu.knows.portal.vo.Message;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class KnowsPortalApplicationTests {
@Test
void contextLoads() {
Message message = new Message();
message.setId(123);
message.setContent("你好");
message.setName("tom");
System.out.println(message.getContent());
System.out.println(message);
}
}
输出结果:
你好
Message(id=123, content=你好, name=tom)
6.3 Lombok常用注解
上次课我们使用Lombok的@Data注解简化了数据封装类的代码使用,那么Lombok还提供了什么注解呢?@Data注解到底有什么含义呢?
常见Lombok注解如下:
- @Setter/@Getter:
- 自动生成当前类所有属性的get / set方法,一般情况下写在类上,但是也可以使用在某个属性上,表示对这个属性生成get / set方法
- @ToString:
- 自动重写Object类的toString方法,输出这个类中的所有属性和属性的值
- @EqualsAndHashCode:
- 自动重写equals和hashCode方法
- @Data:
- 这个注解写在类上,它是@Getter、@Setter、@ToString、@EqualsAndHashCode注解的集合,特别适合用在封装数据的类上。
- @AllArgsConstructor:
- 为这个类生成全参构造
- @NoArgsConstructor:
- 为这个类生成无参构造
- @Slf4j:
- 给这个类添加一个可以记录日志的log对象
lombok使用注意事项:
有些公司不允许使用lombok,认为有bug风险,因为代码不是自己写的,所以今后工作时,遵守公司要求即可。
达内知道项目使用Lombok简化数据封装类的代码!