引入guava包:

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>11.0.2</version>
</dependency>
1、Preconditions 前置校验
前置条件适用于当判断与设置的条件不符合时,抛出异常的操作。(注意:是抛出异常,对于那些想在判空时做相应的处理可以用jdk8中的Optional)
下面给出:
1)对象判空,抛出异常
2)List对象判空,抛出异常
3)数字类型条件判断,抛出异常
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;
}
}
利用Otpinal来对返回的单个对象进行包装(注意:所有的对象都要封装)
下面的例子中,判断UserInfo是否为null,以及对于Long类型如果为null,比如,前段没有传递该参数则,此时可以将其设置为0。
@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 常用工具类的更多相关文章

  1. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  2. IOS开发--常用工具类收集整理(Objective-C)(持续更新)

    前言:整理和收集了IOS项目开发常用的工具类,最后也给出了源码下载链接. 这些可复用的工具,一定会给你实际项目开发工作锦上添花,会给你带来大大的工作效率. 重复造轮子的事情,除却自我多练习编码之外,就 ...

  3. Apache Commons 常用工具类整理

    其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...

  4. Android 常用工具类之SPUtil,可以修改默认sp文件的路径

    参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...

  5. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

  6. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

  7. [C#] 常用工具类——直接在浏览器输出数据

    /// <summary> /// <para> </para> /// 常用工具类——直接在浏览器输出数据 /// <para> ---------- ...

  8. [C#] 常用工具类——加密解密类

    using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...

  9. C#常用工具类——Excel操作类

    /// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> / ...

随机推荐

  1. 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  2. 关于RedirectAttributes 重定向带参数请求问题

    @RequestMapping("/delete") public String delete(String id, RedirectAttributes redirectAttr ...

  3. Spark-windows安装

    Spark 目的:达到能在pycharm中测试 1.安装必要的文件: JDK AnaConda spark hadoop jdk测试:java -version Anaconda测试: 打开Anaco ...

  4. 客户端内嵌Vue页面

    目前很多应用都存在网页端和客户端形式,例如常用的:钉钉.微信等.按传统的开发形式,需要为客户端开发一套界面.基于当前Web应用可以利用三大前端框架和UI框架快速开发出各种酷炫的界面,于是出现了客户端嵌 ...

  5. Flask项目常见面试问题

    一.你的项目中缓存粒度是如何选择的? 缓存粒度一共分为4种. 1.缓存某个数值:一个键只保存一个值,性价比较低,使用率低,如果存储的话我们使用redis的String 2.缓存数据对象:数据库记录对应 ...

  6. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  7. Chrome离线安装包+谷歌访问助手

    Chrome离线安装包+谷歌访问助手 所有chrome版本离线安装包下载地址 谷歌访问助手v2.3.0.crx(需要修改主页) 谷歌上网助手v1.4.3.crx(不用修改主页,需要注册) 两个插件为2 ...

  8. java流压缩图片

    整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享.首先,要压缩的图片格式不能说动态图片,你可以使用bmp.png.gif等,至于压缩质量,可以通过BufferedImage来指定 ...

  9. Jenkins安装插件问题

    最近在电脑尝试安装Jenkins软件 安装插件的时候 一直报错 没有推荐插件提示一直报错 at java.lang.Thread.run(Unknown Source) Caused by: java ...

  10. c#小灶——注释和代码规范

    为什么要写注释? 早上我写完了代码,我和我的朋友们都能看懂,到了晚上,我还能看懂,一周后,就只有上帝能看懂了…… 将来我们写的代码量是很大的,代码又不像我们自然语言这么好理解,可能过段时间我们就不认识 ...