Guava 常用工具类
引入guava包:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>11.0.2</version>
</dependency>
public class PreconditionsExample {
public static void main(String[] args) {
/**
* 对象判空处理
*/
UserInfo userInfo = null;
Preconditions.checkNotNull(userInfo, "userInfo不能为null");
/**
* List对象判空处理
*/
List<String> list = Lists.newArrayList();
Preconditions.checkNotNull(list, "传入的list不能为null");
/**
* 数值类型判断处理
*/
Long projectId = -12L;
Preconditions.checkNotNull(projectId, "projectId不能为null");
Preconditions.checkArgument(projectId > 0, "输入projectId必须大于0", projectId);
}
class UserInfo{
private String name;
}
}
@Slf4j
public class OptionalExample { public static void main(String[] args) {
Optional<UserInfo> userInfo = Optional.ofNullable(getUserInfo());
if (!userInfo.isPresent()){
log.info("userInfo is null");
} Optional<Long> projectIdOptional = Optional.ofNullable(getProjectId());
Long projectId = projectIdOptional.orElse(0L); // 如果projectId为null时,这值为0
} public static UserInfo getUserInfo() {
return null;
} public static Long getProjectId() {
return null;
} @Getter
@Setter
class UserInfo{
private String userName;
}
}
2、retryer实现接口重试机制
在日常开发中,经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般是不靠谱的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候需要使用失败重试调用API接口来获取。
(1)需要再引入guava-retrying包:
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>
(2)实现代码示例如下:
@Slf4j
public class RetryerExample { public static void main(String[] args) throws Exception {
Retryer<Boolean> retryer = RetryerBuilder.<Boolean>newBuilder()
.retryIfResult(Predicates.<Boolean>isNull()) // 设置自定义段元重试源
.retryIfExceptionOfType(Exception.class) // 设置异常重试源
.retryIfRuntimeException() // 设置异常重试源
.withStopStrategy(StopStrategies.stopAfterAttempt(5)) // 设置重试次数 设置重试超时时间????
.withWaitStrategy(WaitStrategies.fixedWait(5L, TimeUnit.SECONDS)) // 设置每次重试间隔
.build(); Callable<Boolean> task = new Callable<Boolean>() {
int i = 0;
@Override
public Boolean call() throws Exception {
i++;
log.info("第{}次执行!", i);
if (i<3) {
log.info("模拟执行失败");
throw new IOException("异常");
}
return true;
}
}; try {
retryer.call(task);
} catch (ExecutionException e) {
log.error("error", e);
} catch (RetryException e) {
log.error("error", e);
} Boolean result = task.call();
log.info("成功输出结果:{}", result);
} }
分析:
上述中方法调用失败了三次,在重试第4次之后,成功返回数据。
3、本地内存 Guava Cache
缓存有分布式缓存和本地缓存,这里主要介绍Google中的Guava工具包中实现的本地缓存工具类,能够有效的控制缓存的策略。
https://segmentfault.com/a/1190000011105644
Guava 常用工具类的更多相关文章
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- IOS开发--常用工具类收集整理(Objective-C)(持续更新)
前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 这些可复用的工具,一定会给你实际项目开发工作锦上添花,会给你带来大大的工作效率. 重复造轮子的事情,除却自我多练习编码之外,就 ...
- Apache Commons 常用工具类整理
其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...
- Android 常用工具类之SPUtil,可以修改默认sp文件的路径
参考: 1. 利用Java反射机制改变SharedPreferences存储路径 Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...
- 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类
快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...
- javaweb常用工具类及配置文件备份
Javaweb常用工具类及配置文件备份 做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /* * hibernate获取sessi ...
- [C#] 常用工具类——直接在浏览器输出数据
/// <summary> /// <para> </para> /// 常用工具类——直接在浏览器输出数据 /// <para> ---------- ...
- [C#] 常用工具类——加密解密类
using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...
- C#常用工具类——Excel操作类
/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...
随机推荐
- 洛谷P2598 [ZJOI2009]狼和羊的故事 题解
题目链接: https://www.luogu.org/problemnew/show/P2598 分析: 我们知道此题的目的是将狼和羊分割开,很容易想到狼在S,羊在T中. 首先,我们可以在狼,羊,空 ...
- 模拟ssh远程执行命令,粘包问题,基于socketserver实现并发的socket
06.27自我总结 1.模拟ssh远程执行命令 利用套接字编来进行远程执行命令 服务端 from socket import * import subprocess server = socket(A ...
- C#3.0新增功能10 表达式树 04 执行表达式
连载目录 [已更新最新开发文章,点击查看详细] 表达式树 是表示一些代码的数据结构. 它不是已编译且可执行的代码. 如果想要执行由表达式树表示的 .NET 代码,则必须将其转换为可执行的 IL ...
- cesium 学习(六) 坐标转换
cesium 学习(六) 坐标转换 一.前言 在场景中,不管是二维还好还是三维也罢,只要涉及到空间概念都会提到坐标,坐标是让我们理解位置的一个非常有效的东西.有了坐标,我们能很快的确定位置相关关系,但 ...
- Java 基础知识面试题
equals与==有什么区别? (1)==是判断两个变量或实例是不是指向同一个内存空间 (2)equals是判断两个变量或实例所指向的内存空间的值是不是相同 Object有哪些公用方法? (1)equ ...
- mysql8.0忘记密码如何操作?
很不幸,刚安装了MYSQL8,由于密码验证方式的不同,自己折腾了一小会,不小心退出来了,进不去了.从网上面查了一下资料,好多都不是特别好使,最后摸索出来可以进行如下操作: 1. 在配置文件中设置将密码 ...
- CHM格式
转载请标明出处:https://www.cnblogs.com/tangZH/p/11176995.html CHM格式为CHM头,CHM头节,内容三部分组成. 总体格式图: 初始化头包含了CHM的相 ...
- 第三章 JavaScript操作Dom对象
常用的方法: 1.访问节点: 通过Document.getElementByXXX()获得一个指定节点-->再通过以下属性节点访问节点:第一部分:节点属性a:parentNode 返回节点的父节 ...
- threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...
- Lexical or preprocessor 'XXX/XXX.h' issue file not found
最近做第三方登录,引入了第三库,结果就出来个这个问题.如下图所示: 刚开始编译运行都没问题,可下次再打开时就报这个错误…… 一个比较弱智的解决办法: 1. 删除第三方库文件(删除到垃圾箱,而且还要在文 ...