如果是在 try {} catch(xxx e) {}
的 catcth 分支中,很容易捕获和记录异常时的堆栈信息,直接把 Exception对象 当着参数传进去即可,但是,有时候需要在没有发生异常的情况下打印堆栈,,,其实也挺简单,现场新建一个 Throwable对象 即可,参考代码如下:
// 省略了 其他代码 if (StrKit.isBlank(fileName)) { logger.warn("文件名为空", new Throwable()); return null; }
如果是在 try {} catch(xxx e) {}
的 catcth 分支中,很容易捕获和记录异常时的堆栈信息,直接把 Exception对象 当着参数传进去即可,但是,有时候需要在没有发生异常的情况下打印堆栈,,,其实也挺简单,现场新建一个 Throwable对象 即可,参考代码如下:
// 省略了 其他代码 if (StrKit.isBlank(fileName)) { logger.warn("文件名为空", new Throwable()); return null; }
对于RPC而言,服务的降级也是必不可少的,何为服务的降级,就是在业务洪流来的时候,服务器的压力陡增,数据库的压力也很大的时候,轻量化服务的功效,比如某个非核心服务需要调用数据库的,我们降级的服务不需要调用数据库,就比如我们在某某电商购物的时候,商品详情页的侧边栏一般会有电商推荐的一些比较类似的产品,这个后台的机制可能是某个推荐算法,根据用户浏览商品的记录给出推荐的产品,这是非核心的逻辑,这个功能在服务器的压力比较大的时候,可以进行降级的处理,我们可以给出几个默认的产品返回,因为推荐算法可能会设计大数据的计算和分析,甚至设计几次的数据库查询,在这个时候我们如果让这个后台方法默认返回几个固定的值的时候,可以减轻服务的压力,给其他的核心服务,例如支付,详情页等服务做出服务资源的让步
SQL语句没错的情况下,获取不到 mybatis 返回的数据,原因是映射文件出错。例子:
// 有一个实体类 class test{ private String myName; private int myAge; …… // getter和setter方法 } // 假设数据库对应的列名分别为 my_name 和 my_age ,表名为 me // 直接写select语句为 <select id=".." resultType="*.*.test">select my_name,my_age from me</select> // 时会获取不到数据,因为表的cloumn和实体类的property不一致
Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
本节介绍Provider端代码的搭建,工欲善其事必先利其器,Provider端的代码结构很重要,写代码的时候,我们需要知道我们自己要干嘛,好了,废话不多说,先写一个接口,接口是明确自己要干什么的利器,写个接口压压惊~
transient的作用及使用方法
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。
然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
注册中心在RPC整个体系中担任的角色是比较重要的,但也是比较微妙的,它维护了所有服务提供者的所暴露服务的信息,最最核心的信息就是IP+端口号,服务消费者会在调用服务的时候去注册中心上去询问它远程调用服务的端口和IP地址,注册中心返回它所需要的信息,服务消费者拿着服务的IP+端口号,如果获取到多个IP的时候,再根据负载策略去远程调用服务,其实最最简单的注册中心的职责就是如此,注册中心的最核心的职责也是如此
List容器类中有一个toArray()
的方法,该方法是用来把List转化为数组的。
这个方法有一个特点就是转化出来的数组是复制了原数据的一个副本而不只是原数据的一个引用。因此我们可以放心的更改这些数据而不会影响到原List中的数据。
注解是java5的新特性。注解可以看做一种注释或者元数据(MetaData),可以把它插入到我们的java代码中,用来描述我们的java类,从而影响java类的行为。
使用Java注解一般来说主要有三种目的