@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 {
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次之后,成功返回数据。
引入guava包:&lt;dependency&gt; &lt;groupId&gt;com.google.guava&lt;/groupId&gt; &lt;artifactId&gt;guava&lt;/artifactId&gt; &lt;version&gt;11.0.2&lt;/version&gt;&lt;/dependency&gt;1、Pr
目录概述基础工具1.Optional2.Objects.equals3.Objects.hash4.MoreObjects.toStringHelper5.ComparisonChain6.Preconditions集合工具1.ImmutableSet2.ImmutableList3.4.5.6.字符串工具1.2.3.4.5.6.附录1.Person.java
工具类将经常用的一些方法进行了封装,遇到相同的场景时不需要重复造轮子,从而大量节省开发人员时间和提高工作效率,Guava就是谷歌发布的高效率的
一、集合工具类
Lists
创建: newArrayList/newLinkedList/newArrayListWithCapacity/newArrayListWithExpectedSize/CopyOnWriteArrayList
其他方法:
对象转换List asList, 切分 partition , 翻转 reverse , 转换 transform ,字节转 charactersOf
创建: newHashSet/newHashSetWithExpectedSize/n
Guava 是 Google 的一个开源项目,包含许多 Google 核心 Java 常用库,如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 与 I/O 等。
Maven依赖
<guava.version>19.0</guava.versio
1.1 使用和避免null
Guava用Optional<T>表示可能为null的T类型引用。一个Optional实例可能包含非null的引用,也可能什么也不包括。它从不说包含的是null值,而是用存在或缺失来表示。但Optional从不会包含null值引用。
Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); //
在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询。
level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。
举个栗子:
1、创建部门架构表:
在 SpringBoot 项目中,Guava 是一个非常常用的依赖。以下是一些常见的 Guava 依赖:
1. guava:Guava 核心库,包含了 Guava 的基本功能,如集合、缓存、并发、字符串处理等工具类。
2. guava-jdk8:Guava 针对 JDK8 的扩展库,包含了一些 Java 8 新增的 API 的实现,如 Optional、Streams、FunctionalInterfaces 等。
3. guava-testlib:Guava 的测试库,包含了 Guava 的测试框架和一些测试工具类,如 Truth、Mockito、JUnit4 等。
4. guava-retrying:Guava 的重试库,提供了一些重试机制的实现,如 Retryer、StopStrategies、WaitStrategies 等。
5. guava-graph:Guava 的图算法库,提供了一些图算法的实现,如 Graph、ValueGraph、Network 等。
6. guava-cache:Guava 的缓存库,提供了一些缓存的实现,如 Cache、LoadingCache、CacheBuilder 等。
7. guava-xml:Guava 的 XML 库,提供了一些 XML 解析和生成的工具类,如 XmlEscapers、XmlReader、XmlWriter 等。
总之,Guava 是一个非常实用的工具库,在 SpringBoot 项目中广泛应用。