optional

Reactor 3 (2): 创建Publisher之Mono

徘徊边缘 提交于 2020-10-22 10:15:36
Reactor中的Publisher Reactor中有两种Publisher:Flux和Mono,其中Flux用来表示0 N个元素的异步序列,Mono用来表示0 1个元素的异步序列,相对于Flux而言Mono更简单一些。 创建Mono reactor中的mono可以通过一些方法创建,常用方法如下: just():可以指定序列中包含的全部元素。 empty():创建一个不包含任何元素。 error(Throwable error):创建一个只包含错误消息的序列。 fromCallable()、fromCompletionStage()、fromFuture()、fromRunnable()和 fromSupplier():分别从 Callable、CompletionStage、CompletableFuture、Runnable 和 Supplier 中创建 Mono。 delay(Duration duration):创建一个 Mono 序列,在指定的延迟时间之后,产生数字 0 作为唯一值。 ignoreElements(Publisher source):创建一个 Mono 序列,忽略作为源的 Publisher 中的所有元素,只产生结束消息。 justOrEmpty(Optional<? extends T> data)和 justOrEmpty(T data):从一个

spring boot 1.5.4 集成devTools(五)

心不动则不痛 提交于 2020-10-22 09:01:38
上一篇: spring boot 1.5.4 整合JSP (四) 1.1 Spring Boot 集成 devTools spring boot 集成 devTools 源码: spring-boot相关项目源码, 码云地址: https://git.oschina.net/wyait/springboot1.5.4.git github地址 : https://github.com/wyait/spring-boot-1.5.4.git 实现步骤: Eclipse Project 必须开启了 Build Automatically ,如果关闭了自动编译的功能,热部署无效。 1. pom 引入 devTools 依赖和插件配置 <!-- devtools--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!--optional=true, 依赖不会传递,该项目依赖 devtools ;之后依赖 SpringBoot1 项目的项目如果想要使用 devtools ,需要重新引入 --> </dependency> 2.可以根据需要调整 application

为什么牛逼的程序员都不用 “ ! = null

谁说胖子不能爱 提交于 2020-10-15 19:19:19
问题 为了避免空指针调用,我们经常会看到这样的语句 ...if (someobject != null) { someobject.doCalc();}... 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢? 精华回答 这是初、中级程序猿经常会遇到的问题。他们总喜欢在方法中返回null,因此,在调用这些方法时,也不得不去判空。另外,也许受此习惯影响,他们总潜意识地认为,所有的返回都是不可信任的,为了保护自己程序,就加了大量的判空。 吐槽完毕,回到这个题目本身: 进行判空前,请区分以下两种情况: 1、null 是一个有效有意义的返回值(Where null is a valid response in terms of the contract; and) 2、null是无效有误的(Where it isn't a valid response.) 你可能还不明白这两句话的意思,不急,继续往下看,接下来将详细讨论这两种情况 先说第2种情况 null就是一个不合理的参数,就应该明确地中断程序,往外抛错误。这种情况常见于api方法。例如你开发了一个接口,id是一个必选的参数,如果调用方没传这个参数给你,当然不行。你要感知到这个情况,告诉调用方“嘿,哥们,你传个null给我做甚"。 相对于判空语句,更好的检查方式有两个 (1)assert语句

Java代码精简之道

◇◆丶佛笑我妖孽 提交于 2020-10-13 00:30:53
前言 古语有云: 道为术之灵,术为道之体;以道统术,以术得道。 其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。 在拜读大佬“孤尽”的文章《 Code Review是苦涩但有意思的修行 》时,感受最深的一句话就是:“优质的代码一定是 少即是多 的精兵原则”,这就是大佬的代码精简之“道”。 工匠追求“术”到极致,其实就是在寻“道”,且离悟“道”也就不远了,亦或是已经得道,这就是“工匠精神”——一种追求“以术得道”的精神。 如果一个工匠只满足于“术”,不能追求“术”到极致去悟“道”,那只是一个靠“术”养家糊口的工匠而已。作者根据多年来的实践探索,总结了大量的Java代码精简之“术”,试图阐述出心中的Java代码精简之“道”。 1.利用语法 1.1.利用三元表达式 普通: String title; if (isMember(phone)) { title = "会员" ; } else { title = "游客" ; } 精简: String title = isMember(phone) ? "会员" : "游客" ; 注意:对于包装类型的算术计算,需要注意避免拆包时的空指针问题。 1.2.利用for-each语句 从Java 5起,提供了for-each循环

【SpringCloud】Spring Cloud Sleuth + Zipkin 服务调用链路追踪(二十五)

Deadly 提交于 2020-10-09 06:05:20
服务调用链路追踪   微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。   举个例子,在微服务系统中,一个来自用户的请求,请求先达到前端A(如前端界面),然后通过远程调用,达到系统的中间件B、C(如负载均衡、网关等),最后达到后端服务D、E,后端经过一系列的业务逻辑计算最后将数据返回给用户。对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程的数据记录下来呢?这就需要用到服务链路追踪。   Google开源的 Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。     常见的业界开源解决方案   1、Dapper(谷歌)   2、Zikpin,与Spring Cloud Sleuth结合的比较好   3、Eagleeye(阿里)   4