高性能JSON框架之FastJson的简单使用

前言

FastJson的介绍:

JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,Github地址: FastJson

FastJson的特点:

1.FastJson数度快,无论序列化和反序列化,都是当之无愧的fast
2.功能强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
3.零依赖(没有依赖其它任何类库)

FastJson的简单说明:

FastJson对于json格式字符串的解析主要用到了一下三个类:
1.JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换
2.JSONObject:fastJson提供的json对象
3.JSONArray:fastJson提供json数组对象

还在迷茫和彷徨吗,快上车,老司机带你飞!

weiter lesen

HttpClient与Spring Boot之间的json数据交互

使用HttpClient传递key/value数据

HttpClient网络请求代码

HttpClient发送key/value数据,返回json格式数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Test
public void test() {
//网络请求地址
String url = "http://localhost:8080/api/user";
//请求方式为post请求
HttpPost httppost = new HttpPost(url);
//创建网络请求对象
HttpClient httpClient = new DefaultHttpClient();
//请求体是Key/value数据格式,将key/value数据保存在NameValuePair中
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", "changyuan"));
params.add(new BasicNameValuePair("age", "18"));
try {
//使用UrlEncodedFormEntity设置请求体的编码格式为UTF_8(如果不设置编码格式,后台获取的数据可能会出现中文乱码)
UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
//设置数据
httppost.setEntity(urlEntity);
//使用HttpClient发送网络请求
HttpResponse response = httpClient.execute(httppost);
//如果状态码为200,就是正常返回
if (response.getStatusLine().getStatusCode() == 200) {
//获取请求的数据(response.getEntity()方法可以获取请求的数据)
String result = EntityUtils.toString(response.getEntity());
log.info("result>>>>> " + result);
}
} catch (Exception e) {
e.printStackTrace();
}
}

weiter lesen

Spring MVC+ajax 实现json格式数据传递

使用ajax传递JSON对象

下面示例为ajax发送json对象,返回json格式数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$.ajax({
url: "api/user",
type: "POST",
timeout: txnTimeOut,
async: true,
dataType: "json",
data: {username : "lucy"},
//注意:这里不能加下面这行,否则数据会传不到后台
//contentType:'application/json;charset=UTF-8',
success: function(e){
if($.txnIsSuzccess(e.respCode)){
//window.location.href=e.codeUrl;
console.log(e);
}else{
exceptionHandle(e);
}
},
error: function(e){
errorHandle(e);
}
});

注意:这里不能加下面这行,否则数据会传不到后台

1
contentType:'application/json;charset=UTF-8',

后台代码

weiter lesen

Spring Boot整合Mybatis实现Druid多数据源




### 多数据源的应用场景 ###

目前,业界流行的数据操作框架是 Mybatis,那 Druid 是什么呢?
Druid 是 Java 的数据库连接池组件。Druid 能够提供强大的监控和扩展功能。比如可以监控 SQL ,在监控业务可以查询慢查询 SQL 列表等。Druid 核心主要包括三部分:

(1) DruidDriver 代理 Driver,能够提供基于 Filter-Chain 模式的插件体系。

(2) DruidDataSource 高效可管理的数据库连接池

(3) SQLParser

当业务数据量达到了一定程度,DBA 需要合理配置数据库资源。即配置主库的机器高配置,把核心高频的数据放在主库上;把次要的数据放在从库,低配置。开源节流,就这个意思。把数据放在不同的数据库里,就需要通过不同的数据源进行操作数据。这里我们举个 springboot-mybatis-mutil-datasource 工程案例:

User 用户表在主库 master 上,地址表 city和work表分别在在从库 cluster 和cluster2上。下面实现获取根据用户名获取用户信息,地址信息,以及工作信息,使用RESTful API进行测试,从主库和从库中分别获取数据

weiter lesen

Annotation自定义注解的简单使用

Annotation注解处理器

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。

注解处理器类库

Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。除此之外,Java在java.lang.reflect 包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:

(1) Class:类定义
(2) Constructor:构造器定义
(3) Field:累的成员变量定义
(4) Method:类的方法定义
(5) Package:类的包定义

weiter lesen

Annotation自定义注解的简单介绍

Annotation自定义注解元注解的介绍

在学习自定义注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。

元注解:元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:

(1) @Target
(2) @Retention
(3) @Documented
(4) @Inherited

这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。

@Target

@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

weiter lesen

ConcurrentHashMap的简单使用

ConcurrentHashMap的介绍

ConcurrentHashMap是一个线程安全,并且是一个高效的HashMap,ConcurrentMap,它是一个接口,是一个能够支持并发访问的java.util.map集合,在原有java.util.map接口基础上又新提供了4种方法,进一步扩展了原有Map的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface ConcurrentMap<K, V> extends Map<K, V> {
//插入元素
V putIfAbsent(K key, V value);
//移除元素
boolean remove(Object key, Object value);
//替换元素
boolean replace(K key, V oldValue, V newValue);
//替换元素
V replace(K key, V value);
}

(1) putIfAbsent: 与原有put方法不同的是,putIfAbsent方法中如果插入的key相同,则不替换原有的value值

(2) remove: 与原有remove方法不同的是,新remove方法中增加了对value的判断,如果要删除的key–value不能与Map中原有的key–value对应上,则不会删除该元素

(3) replace(K,V,V): 增加了对value值的判断,如果key–oldValue能与Map中原有的key–value对应上,才进行替换操作

(4) replace(K,V): 与上面的replace不同的是,此replace不会对Map中原有的key–value进行比较,如果key存在则直接替换

weiter lesen

CopyOnWriteArrayList的简单使用

CopyOnWriteArrayList的介绍

CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的, 一般在多线程操作时,一个线程对list进行修改。一个线程对list进行foreach时会出现, java.util.ConcurrentModificationException错误。

下面来看一个列子:两个线程,一个线程foreach,一个线程修改list的值。

读线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 读线程
*/
private static class ReadTask implements Runnable {
List<String> list;
public ReadTask(List<String> list) {
this.list = list;
}
@Override
public void run() {
for (String str : list) {
log.info("ReadTask>>>>>" + str);
}
}
}

weiter lesen

ExecutorService的理解与简单使用






ExecutorService的简介

接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。一个ExecutorService 实例因此特别像一个线程池。事实上,在 java.util.concurrent 包中的ExecutorService的实现就是一个线程池的实现

ExecutorService的实现

由于 ExecutorService 只是一个接口,你如果需要使用它,那麽就需要提供一个该接口的实现。ExecutorService 接口在 java.util.concurrent 包中有如下实现类:



这里我简单使用其中2个实现类

  1. ThreadPoolExecutor

  2. ScheduledThreadPoolExecutor

weiter lesen


Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2019 ZhouXu'Blog All Rights Reserved.

UV : | PV :