开发环境
名称 | 版本 |
---|---|
操作系统 | Windows 10 X64 |
JDK | JDK1.8(jdk-8u151-windows-x64) |
IntelliJ IDEA | IntelliJ IDEA 2018.3 |
Maven | Maven 3.6.0 |
Maven-查找 maven 依赖方法
本文中常用的查看方法
本文中需要查看编译后的代码和代码结构,方便对比引用前后的代码
查看编译后的代码
target
-classes
-com
-test
查看代码结构-Structure
视图
-工具窗口
-Structure
想看哪个类就在对应目录中点哪个代码文件
lombok
介绍
Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。
pom.xml 配置
<properties>
<lombok.version>1.18.6</lombok.version>
</properties>
<dependencies>
<!--lombok start-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--lombok end-->
</dependencies>
@Data
import 及使用
package com.test.invoice.data;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class TRbtTestData {
private String name;
private String version;
}
效果
@FieldNameConstants
@FieldNameConstants
在 lombok v1.16.22
中作为实验性功能引入。
@FieldNameConstants
在 lombok v1.18.4
中被重新设计。
lombok.config 选项 lombok.fieldNameConstants.uppercase = true 被添加到 lombok v1.18.8中。
package com.test.model;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
@Data
@FieldNameConstants
public class Student {
private Integer id;
private String name;
public static void main(String[] args) {
System.out.println(Student.Fields.id);
System.out.println(Student.Fields.name);
}
}
输出
id
name
Lombok 常用注解
来源:Lombok常用注解
常用注解 | 描述 |
---|---|
@Data | 相当于@Setter + @Getter + @ToString + @EqualsAndHashCode |
@Setter @Getter | 作用于属性上,自动生成 getter 和 setter方法 |
@NonNull | 判断是否为空,如果为空,则抛出 java.lang.NullPointerException |
@Synchronized | 作用在方法上,自动添加到同步机制,生成的代码并不是直接锁方法而是锁代码块 |
@ToString | 生成 toString() 方法,该注解有以下多个属性可以进一步设置: callSuper:是否输出父类的 toString() 方法,默认为false includeFieldNames:是否包含字段名称,默认为 true exclude:排除生成 toString() 的字段 |
@EqualsAndHashCode | |
@Cleanup | 用于确保已分配的资源被释放,自动帮我们调用 close() 方法。比如 IO 的连接关闭。 |
@SneakyThrows | |
@NoArgsConstructor | 自动生成无参数构造函数。 |
@AllArgsConstructor | 自动生成全参数构造函数。 |
@Builder | |
@SuperBuilder | - |
alibaba.fastjson
介绍
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
Fastjson 源码地址:https://github.com/alibaba/fastjson
Fastjson 中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
pom.xml
配置
<properties>
<fastjson.version>1.2.38</fastjson.version>
</properties>
<dependencies>
<!--Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
import
及使用
package com.test.invoice.data;
import com.alibaba.fastjson.annotation.JSONField;
public class TRbtTestData {
@JSONField(name = "name")
private String name;
@JSONField(name = "version")
private String version;
}
gson
介绍:Gson
是 Google
开源的一个 JSON
库
pom.xml
配置
<properties>
<gson.version>2.8.5</gson.version>
</properties>
<dependencies>
<!-- 用于日志切面中,以 json 格式打印出入参(本来使用阿里的 FASTJSON, 但是对于文件上传的接口,打印参数会报错,换为 Gson) -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
</dependencies>
import
及使用
属性重命名 @SerializedName 注解的使用
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
log.info("请求方法 Get(),请求参数:"+ gson.toJson(data));
io.jsonwebtoken
介绍
JSON web Token,简称 JWT,本质是一个 token,是一种紧凑的 URL 安全方法(注意是方法,博主刚开始接触一直以为是一种像 shiro 一样的),用于在网络通信的双方之间传递。一般放在 HTTP 的 headers 参数里面的 authorization 里面(这个是可以自己定义放在哪里的,毕竟只是一种验证用户的方式),值的前面加 Bearer 关键字和空格。除此之外,也可以在 url 和 request body 中传递。
pom.xml
配置
<properties>
<jjwt.version>0.8.0</jjwt.version>
</properties>
<dependencies>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
</dependencies>
import
及使用
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.crypto.MacProvider;
import java.security.Key;
// We need a signing key, so we'll create one just for this example. Usually
// the key would be read from your application configuration instead.
Key key = MacProvider.generateKey();//这里是加密解密的key。
String compactJws = Jwts.builder()//返回的字符串便是我们的jwt串了
.setSubject("Joe")//设置主题
.signWith(SignatureAlgorithm.HS512, key)//设置算法(必须)
.compact();//这个是全部设置完成后拼成jwt串的方法
swagger
介绍
通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文档
pom.xml
配置
<properties>
<swagger.version>2.7.0</swagger.version>
</properties>
<dependencies>
<!--springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文档-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
import
及使用
package com.test.invoice.data;
import io.swagger.annotations.ApiModelProperty;
public class TRbtTestData {
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("版本号")
private String version;
}
Swagger Edit
介绍
Swagger是专门用来管理接口一个工具。在开发过程中,接口一直是纷争的聚焦点,能有效管理接口(保存好记录、及时更新、方便查看、接口测试)。会让整个项目开发效率提升很大。
Swagger 官网:http://swagger.io/
Swagger Github:https://github.com/swagger-api
Swagger Editor 在线 demo:http://editor.swagger.io
Swagger UI 在线 demo:http://petstore.swagger.io/
pom.xml
配置
<properties>
<swagger-ui.version>2.7.0</swagger-ui.version>
</properties>
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger-ui.version}</version>
</dependency>
</dependencies>
Google Guava
介绍
Guava 工程包含了若干被 Google 的 Java 项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些工具每天都在被 Google 的工程师应用在产品服务中。
pom.xml
配置
<properties>
</properties>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
</dependencies>
cn.hutool
介绍
https://www.xiaoleilu.com/hutool-preface
Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。它最初是作者项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。
Hutool是Hu + tool的自造词,谐音“糊涂”,寓意,追求“万事都作糊涂观,无所谓失,无所谓得”的境界。
Hutool如何改变我们的coding方式
Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。
以计算MD5为例:
【以前】打开百度 -> 搜“Java MD5加密” -> 打开某篇博客-> 复制粘贴 -> 改改好用
【现在】引入Hutool -> SecureUtil.md5()
同样,当我们想实现什么功能,脑袋中第一个想到的就是去找XXXUtil,而非百度。
pom.xml
配置
<properties>
<hutool.version>4.5.1</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
import
及使用
//字符串转换
int a = 1;
//aStr为"1"
String aStr = Convert.toStr(a);
long[] b = {1,2,3,4,5};
//bStr为:"[1, 2, 3, 4, 5]"
String bStr = Convert.toStr(b);
mybatis-Plus
介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在
MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
pom.xml
配置
<properties>
<mybatisplus.version>3.1.0</mybatisplus.version>
</properties>
<dependencies>
<!--MyBatis-Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
</dependencies>
import
及使用
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
@TableId(type = IdType.UUID)
private String id;
dozer
介绍
Dozer 是一个 JavaBean 映射工具库。它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射
pom.xml
配置
<properties>
</properties>
<dependencies>
<!--Dozer是一个JavaBean映射工具库。它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射-->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-core</artifactId>
<version>6.1.0</version>
</dependency>
</dependencies>
junit
介绍
JUnit 是一个Java编程语言的单元测试框架
pom.xml
配置
<properties>
</properties>
<dependencies>
<!--JUnit 是一个Java编程语言的单元测试框架-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
bouncy castle
介绍
bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供 JCE 1.2.1 的实现
pom.xml
配置
<properties>
</properties>
<dependencies>
<!--bouncy castle(轻量级密码术包)是一种用于 Java 平台的开放源码的轻量级密码术包;它支持大量的密码术算法,并提供JCE 1.2.1的实现-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.55</version>
</dependency>
</dependencies>
spongycastle
介绍
密码加密框架
pom.xml
配置
<properties>
</properties>
<dependencies>
<!--密码加密框架-->
<dependency>
<groupId>com.madgag.spongycastle</groupId>
<artifactId>core</artifactId>
<version>1.54.0.0</version>
</dependency>
</dependencies>
apache.pdfbox
介绍
Apache PDFbox 是一个开源的、基于 Java 的、支持 PDF 文档生成的工具库,它可以用于创建新的 PDF 文档,修改现有的 PDF 文档,还可以从 PDF 文档中提取所需的内容。Apache PDFBox 还包含了数个命令行工具
pom.xml
配置
<dependencies>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.4</version>
</dependency>
</dependencies>
lowagie
介绍
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。
pom.xml
配置
<dependencies>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
</dependencies>
HikariCP
介绍
号称性能最好的 JDBC 连接池
pom.xml
配置
<properties>
<HikariCP.version>3.3.1</HikariCP.version>
</properties>
<dependencies>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>${HikariCP.version}</version>
</dependency>
</dependencies>
easyexcel
介绍
EasyExcel 是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel。
github 地址:https://github.com/alibaba/easyexcel
pom.xml
配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.5</version>
</dependency>
dom4j
DOM4J 是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
pom.xml
配置
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- XPath -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
使用案例
注解库,例如 @Resource 注解
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
定时任务
常用定时任务框架
类型 | 定时任务框架 | 描述 |
---|---|---|
单机 | Timer | 单线程,最基础的定时任务实现方式 |
单机 | ScheduledExecutorService | ScheduledExecutorService 内部是线程池, 能更合理的利用资源。 |
单机 | Quartz | 它支持 cron 表达式。 |
单机 | SpringTask | 只需要一个简单的 @Schedule 注解,就能实现定时任务的功能,并且支持 cron 表达式 |
分布式 | XXL-JOB | 分布式任务调度平台 开发迅速、学习简单、轻量级、易扩展 |
分布式 | Elastic-Job | ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案 |
分布式 | LTS | LTS(light-task-scheduler)主要用于解决分布式任务调度问题, 支持实时任务,定时任务和 Cron 任务 |
分布式 | SchedulerX | SchedulerX 是阿里中间件自研的基于 Akka 架构(Akka in SchedulerX 2.0)的新一代分布式任务调度平台, 提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度及可运维等能力。 |
分布式 | Saturn | Saturn:一个分布式作业调度平台。 据悉 Saturn 平台已经平稳运行,承载着唯品会核心系统的全部定时任务的调度,监控,配置,经受住了生产环境的各种考验 |
分布式 | PowerJob | 全新一代分布式任务调度与计算框架 |