目录
接收到数据之后就是解析数据,如果接收到的json数据包含很多list,每个list又包含很多字段,通过下面代码获取list,贴出一条代码作为例子吧,
6.set数据使用的方法(PropertyDescriptor)
8.@Async+CompletableFuture使用线程池分批保存数据
有这样一个需求,现有两个系统分别有自己的数据库,一个旧系统,一个新系统,将旧系统数据库一些表数据同步到新系统数据库中去的小程序,花了一点时间分析了两个数据库,数据库结构,字段都不同。客户要求不使用工具同步数据,要求写一个小程序,这个小程序(项目之外自己创的独立的springboot项目)有定时任务,定时任务定时轮训数据库查出数据库最新的数据,并且调用api服务将获取到的数据发送到api服务,api服务接收数据解析为新系统数据库数据格式,最后添加进数据库,第一次全量同步,之后增量同步。
定时任务使用的Springboot自带的,这个可以参考使用Springboot 自带的@Scheduled注解实现定时任务
1.实现远程post请求
下面首先创建HttpClient用来实现远程post请求
实现方法很多可以参考
private static final int CONNECT_TIMEOUT =3000000;
private static final int CONNECTION_REQUEST_TIMEOUT =3000000;
private static final int SOCKET_TIMEOUT =3000000;
/**
* 创建createHttpPost
* @param url 请求url
* @param params 请求参数
* @return String
*/
public static String createHttpPost(String url, String params){
log.info("正在请求的url:{}",url);
//创建HttpClient实例
HttpClient client = HttpClients.createDefault();
//创建HttpPost远程连接实例
HttpPost httpPost = new HttpPost(url);
try {
// 配置请求参数实例
// 设置连接主机服务超时时间
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT)
// 设置连接请求超时时间
.setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT)
// 设置读取数据连接超时时间
.setSocketTimeout(SOCKET_TIMEOUT)
.build();
httpPost.setConfig(requestConfig);
// 设置请求头
httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
//JSONObject.toJSONString(map)将map集合转成JSONObject
StringEntity entity = new StringEntity(params,"utf-8");
//字符编码
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
//将请求回来的json转成String
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
return EntityUtils.toString(response.getEntity(),"utf-8");
}
} catch (Exception e) {
log.error("在进行url:{},时发生异常:{}",url,e.getMessage(),e);
}
return null;
}
2.发送数据
接下来就是将获取的数据(SyncDataParam )通过http请求方式发送给另一个服务(api服务),在api服务接收数据是发现日期都为long类型的时间戳,这里就使用JSON.toJSONStringWithDateFormat可以设置时间格式
/**
* 发送http请求api服务接口 将获取的数据发送出去.
* @param syncDataParam 需要发送的数据
* @return String
*/
@Override
public String buildSyncData(SyncDataParam syncDataParam){
Map<Object, Object> map = Maps.newHashMap();
log.info("当前获取的数据syncType=:{}",getSyncType().getValue());
map.put("itemParam", syncDataParam);
return HttpClientUtil.createHttpPost(syncDataUrl, JSON.toJSONStringWithDateFormat(map,"yyyy-MM-dd HH:mm:ss"));
}