本节主要讲述,lombok的功能简单使用,项目引入,以及项目所需要的中间件的安装,如:nacos,redis。
lombok是一个开源的代码生成库,能以简单的注解形式来简化Java类中的大量样板代码,提高开发人员的开发效率。
例如:开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量。
lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法,使代码看起来更简洁。
lombok对应的maven坐标:
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.10version>
dependency>
要使用lombok需要在IDE中安装对应的lombok插件。本课程使用的开发工具为IntelliJ IDEA,安装插件过程如下:
1、打开IntelliJ IDEA后点击菜单栏中的File–>Settings进入到设置页面
2、点击设置页面中的Plugins进行插件的安装,在右侧选择Browse repositories…,然后在搜索页面输入lombok,可以查询到下方的Lombok Plugin,鼠标点击Lombok Plugin可在右侧看到Install按钮,点击该按钮便可安装
序号 | 注解 | 说明 | 备注 |
---|---|---|---|
1 | @Setter | 注解在类或属性,注解在类时为所有属性生成setter方法,注解在属性上时只为该属性生成setter方法 | |
2 | @Getter | 使用方法同@Setter,区别在于生成的是getter方法 | |
3 | @ToString | 注解在类,添加toString方法 | |
4 | @EqualsAndHashCode | 注解在类,生成hashCode和equals方法 | |
5 | @NoArgsConstructor | 注解在类,生成无参的构造方法 | 常用 |
6 | @RequiredArgsConstructor | 注解在类,为类中需要特殊处理的属性生成构造方法,比如final和被@NonNull注解的属性 | |
7 | @AllArgsConstructor | 注解在类,生成包含类中所有属性的构造方法 | 常用 |
8 | @Data | 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法 | 常用,包含:1,2,3,4 |
9 | @Slf4j | 注解在类,生成log变量,用于记录日志 |
第一步:创建maven工程lombok_demo并配置pom.xml文件
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.itcastgroupId>
<artifactId>lombok_demoartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.10version>
dependency>
dependencies>
project>
第二步:创建User类并加入lombok提供的注解
package cn.itcast.entity;
import lombok.*;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
第三步:创建测试类TestLombok
package cn.itcast;
import cn.itcast.entity.User;
public class TestLombok {
public static void main(String[] args) {
//无参构造方法
User user1 = new User();
/*
setter方法
*/
user1.setId(1);
user1.setName("itcast");
user1.setAge(18);
/*
getter方法
*/
int id = user1.getId();
String name = user1.getName();
int age = user1.getAge();
//带有所有参数的构造方法
User user2 = new User(2,"itheima",20);
//建造者模式
User user3 = User.builder().id(3).name("boxuegu").age(22).build();
/*
toString方法
*/
System.out.println(user1.toString());
System.out.println(user2.toString());
System.out.println(user3.toString());
}
}
注:可以使用反编译工具查看生成的class文件内容
本项目使用Nacos来作为服务的注册和配置中心。Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
安装和配置过程如下:
第1步:下载Nacos安装包,地址https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
第2步:将下载的zip压缩文件解压
第3步:修改配置文件:NACOS_HOME/conf/application.properties
# 修改范例如下:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
注意:Nacos在存储数据时既可以使用内置数据库存储,也可以通过第三方指定的数据库存储。我们上面指定了使用MySQL数据库来存储Nacos的相关数据,所以需要配置我们使用的MySQL数据库的数据源信息,这个可以根据自己的MySQL数据库进行相应调整,例如MySQL的地址、用户名、密码等。
第4步:创建数据库
CREATE DATABASE `nacos` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
第5步:执行NACOS_HOME/conf/nacos-mysql.sql数据库脚本文件,完成后可以看到创建了如下表
第6步:启动Nacos服务,双击NACOS_HOME/bin/startup.cmd
第7步:访问Nacos控制台,地址http://localhost:8848/nacos,默认用户名/密码:nacos/nacos
第8步:新建命名空间pinda-dev,描述:通用权限系统;对应的数据库表:tenant_info
注意,命名空间的id需要替换到项目文件pd-parent/pom.xml中对应的nacos命名空间的id:(该操作需要项目导入后修改)
第9步:导入配置文件,选择nacos配置中心的命名空间,点击导入配置按钮,选择文件:docs/nacos/nacos_config_export_2020-03-23 17_31_42.zip(改文件课件提供)。
导入完成后如下:
在项目开发阶段我们使用windows版的Redis,直接解压授课资料中redis-win32-win64.zip压缩文件,然后双击REDIS_HOME/64bit/redis-server.exe启动Redis服务即可使用。实际生产部署的时候使用Linux版的Redis.
redis服务端:redis-win32-win64.zip
redis管理工具:redisredis-desktop-manager-0.8.8.384.exe
(1)安装:直接解压授课资料中redis-win32-win64.zip压缩文件到一个”非中文的目录下“即可;
(2)启动服务:双击REDIS_HOME/64bit/redis-server.exe启动Redis服务即可使用
redisredis-desktop-manager管理界面
鉴于时间关系,我们不再手动创建工程,而是直接从课程资料中提供的初始工程pinda-authority导入即可。
导入步骤:
1、将初始工程pinda-authority复制到任意没有中文和空格的目录下
2、打开IDEA,选择Open,选择pinda-authority工程目录即可,导入后maven会download很多pom.xml中的组件
导入的项目结构如下:
品达通用权限系统项目整体工程结构和模块功能如下:
pinda-authority # 聚合工程,用于聚合pd-parent、pd-apps、pd-tools等模块
├── pd-parent # 10000. 父工程,nacos配置及依赖包管理
├── pd-apps # 20000. 应用目录
├── pd-auth # 20100. 权限服务父工程
├── pd-auth-entity # 20101. 权限实体
├── pa-auth-server # 20102. 权限服务
├── pd-gateway # 20201. 网关服务
└── pd-tools # 30000. 工具工程
├── pd-tools-common # 30100. 基础组件:基础配置类、函数、常量、统一异常处理、undertow服务器
├── pd-tools-core # 30200. 核心组件:基础实体、返回对象、上下文、异常处理、分布式锁、函数、树
├── pd-tools-databases # 30300. 数据源组件:数据源配置、数据权限、查询条件等
├── pd-tools-dozer # 30400. 对象转换:dozer配置、工具
├── pd-tools-j2cache # 30500. 缓存组件:j2cache、redis缓存
├── pd-tools-jwt # 30600. JWT组件:配置、属性、工具
├── pd-tools-log # 30700. 日志组件:日志实体、事件、拦截器、工具
├── pd-tools-swagger2 # 30800. 文档组件:knife4j文档
├── pd-tools-user # 30900. 用户上下文:用户注解、模型和工具,当前登录用户信息注入模块
├── pd-tools-validator # 31000. 表单验证: 后台表单规则验证
├── pd-tools-xss # 31100. xss防注入组件
项目服务有两个:网关服务和权限服务:
应用 | 端口 | 说明 | 启动命令 |
---|---|---|---|
pd-gateway | 8760 | 网关服务 | java -jar pd-gateway.jar & |
pd-auth-server | 8764 | 权限服务 | java -jar pd-auth-server.jar & |
由于本系统是基于当前非常流行的前后端分离开发方式开发,其中前端部分是由专门的前端开发人员负责,我们课程中直接使用即可。
通过前面导入的初始项目可以看到,pd-tools工程中的各个子模块已经完成了开发,这些子模块属于项目的基础组件,为我们后续开发网关服务和权限服务提供支持,而且有一些子模块在其他项目中也可以复用。由于这些子模块会涉及到一些新技术或者框架,所以本课程会先讲解这些新技术或者框架的使用方法,然后再带领大家通读pd-tools中的相关模块的代码实现,从而了解此模块的作用和开发过程。
本课程会按照如下顺序介绍pd-tools中的各个模块:
步骤 | 模块\知识点\技能点 | 说明 |
---|---|---|
1 | pd-tools-swagger2 | 文档组件:knife4j文档 |
2 | pd-tools-common | 基础组件:基础配置类、函数、常量、统一异常处理、undertow服务器 |
3 | pd-tools-core | 核心组件:基础实体、返回对象、上下文、异常处理、分布式锁、函数、树 |
4 | pd-tools-databases | 数据源组件:数据源配置、数据权限、查询条件等 |
5 | pd-tools-dozer | 对象转换:dozer配置、工具 |
6 | pd-tools-j2cache | 缓存组件:j2cache、redis缓存 |
7 | pd-tools-jwt | JWT组件:配置、属性、工具 |
8 | pd-tools-log | 日志组件:日志实体、事件、拦截器、工具 |
9 | pd-tools-user | 用户上下文:用户注解、模型和工具,当前登录用户信息注入模块 |
10 | pd-tools-validator | 表单验证: 后台表单规则验证 |
11 | pd-tools-xss | xss防注入组件 |
学习完这些模块之后就可以开发后面的网关服务和权限服务了。