项目开发中常用的jar包以及sdk
1.MetricService
Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同时,Metrics能够很好的跟Ganlia、Graphite结合,方便的提供图形化接口。
2.Guava中的缓存
引入com.google.common.cache包,使用缓存。
/**
* 保存各个websocket连接
*/
private Cache<String, XpWebSocketSession> WEBSOCKET_SESSION_CACHE;
基本概念
Guava中的缓存是本地缓存的实现,与ConcurrentMap相似,但不完全一样。最基本的区别就是,ConcurrentMap会一直保存添加进去的元素,除非你主动remove掉。而Guava Cache为了限制内存的使用,通常都会设置自动回收。
Guava Cache的使用场景:
以空间换取时间,就是你愿意用内存的消耗来换取读取性能的提升
你已经预测到某些数据会被频繁的查询
缓存中存放的数据不会超过内存空间
Guava Cache是单个应用运行时的本地缓存,单机版的缓存。它不把数据存放到文件或外部服务器。如果这不符合你的需求,请尝试Memcached或Redis。
优缺点
优点
线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素。
提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收。定时回收有两种:按照写入时间,最早写入的最先回收;按照访问时间,最早访问的最早回收。
监控缓存加载/命中情况。
集成了多部操作,调用get方式,可以在未命中缓存的时候,从其他地方获取数据源(DB,redis),并加载到缓存中。
缺点
Cuava Cache的超时机制不是精确的
使用
Cache是Guava提供的最基本缓存接口,Cache是通过CacheBuilder对象来build出来的,build之前可以设置一系列的参数
WEBSOCKET_SESSION_CACHE = CacheBuilder.newBuilder()
.expireAfterWrite(expire, TimeUnit.HOURS)
.initialCapacity(initCacheCapacity)
.maximumSize(maxCacheSize)
.concurrencyLevel(concurrencyLevel)
.recordStats()
.build();
3.StringUtils工具类
StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)。
除了构造器,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.xxx()
4.CollectionUtils工具类
CollectionUtils提供很多对集合的操作方法,常用的方法如下:
5.swagger
是什么
是一款让你更好的书写API文档的规范且完整框架。
提供描述、生产、消费和可视化RESTful Web Service。
是由庞大工具集合支撑的形式化规范。这个集合涵盖了从终端用户接口、底层代码库到商业API管理的方方面面。
@ApiModel注解
使用场景:在实体类上边使用,标记类时swagger的解析类。
概述:提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省。
@ApiModel("用于语义请求")
public class UserQueryReq {
@ApiModelProperty注解
@ApiModelProperty("硬件版本号")
private String hid;
6.fastjson工具
fastjson是阿里巴巴出品的快速解析json的一个工具
解决的问题
一般最常见的是这两个方法:
JSON.toJSONString(object):序列化对象,生产字符串
JSON.parse(text):反序列化对象,字符串转json
对于一般的没有什么变更的操作来说,这两个其实够用了.
但有时候情况会有些特殊,比如说:某个字段我想转成json时换个键名.或者我忽略某个字段等特殊操作,如果用编程式开发的话实在是有些烦闷的.比较坑爹.用注解的方式就很不错.
@JSONField注解
一个简单的demo如下:
public class JSonTest {
private String id ="111";
private String name ="tom ";
private Date date = new Date();
...getter/setter
}
public static void main(String[] args) {
System.out.println(JSON.toJSONString(new JSonTest()));
}
如果此时我想将这个类转成json,但要像"userid:111,name:tom"注意是userid,而不是id,那么这样既可.
@JSONField(name="userid")
private String id ="111";
private String name ="tom ";
打印结果:{“date”:1561545203036,“name”:"tom ",“userid”:“111”}
@JsonProperty注解
@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别)
@JSONField(name = "list.item.focus")
@JsonProperty("list.item.focus")
@ApiModelProperty("焦点")
String focus;
7.SpringBeanUtils工具类
可通过SpringBeanUtils工具类拿到IOC容器中的bean
public WsResp textSemantic(UserQueryReq req) {
HighFreedomDialogReq hfdReq = convertReq(req);
final AbcService proxy = SpringBeanUtils.getBean(AbcService.class);
return proxy.textSemantic(hfdReq);
}
8.MessageListener接口
springboot可以利用该接口实现Rsdis的失效监听事件
使用步骤
1.首先在pom文件中加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.创建一个监听类实现MessageListener接口,重写onMessage方法
当key失效时,会触发onMessage方法,只能获取失效的key值,不能获取key对应的value值