Java 以增量方式创建JSON数据并将其推送到前端
我的情况是,我需要提取一家公司3.2万多名销售人员的销售记录,并在UI中显示他们的总赢款、总管道、总预测类型的销售数字。我正在从oracle db读取数据,创建一个包含32K个项目(每个销售顾问的数据)的JSON对象,并通过REST端点将其公开。一旦json对象被创建,它就会通过jquery被调用并显示出来。但是从db读取数据,获取并创建一个32K记录的json对象需要相当长的时间(大约15-20分钟),我的UI会被阻塞,直到json对象被创建为止 我的前端包含一个无限滚动的表格,在表格的每个滚动上提取200多条记录 我已经使用1000-1500条记录测试了WS,它在30秒内返回。因此,我希望创建中间层对象,通过向json对象中添加500多个项目,并将更新后的版本发送给客户端,使其能够读取数据并不断更新json对象。在可滚动表中以增量方式读取数据的UI层无论如何都会逐渐使用数据,并且一次不需要所有32K记录 有没有一种方法可以实现json对象的增量更新,UI可以增量地使用它?提前感谢您在这方面的帮助 读取数据并生成包含项的数组列表的java类如下所示:Java 以增量方式创建JSON数据并将其推送到前端,java,jquery,json,rest,jdbc,Java,Jquery,Json,Rest,Jdbc,我的情况是,我需要提取一家公司3.2万多名销售人员的销售记录,并在UI中显示他们的总赢款、总管道、总预测类型的销售数字。我正在从oracle db读取数据,创建一个包含32K个项目(每个销售顾问的数据)的JSON对象,并通过REST端点将其公开。一旦json对象被创建,它就会通过jquery被调用并显示出来。但是从db读取数据,获取并创建一个32K记录的json对象需要相当长的时间(大约15-20分钟),我的UI会被阻塞,直到json对象被创建为止 我的前端包含一个无限滚动的表格,在表格的每个滚
public List<FLBDetail> retrieveFLB() throws SQLException, ParseException{
FLBSqlQueries queryObj=new FLBSqlQueries();
String query = queryObj.retriveFLBQuery();
DataRetrieval obj=new DataRetrieval();
ResultSet rs=obj.executeQuery(query);
System.out.println(query);
List<FLBDetail> domainList=new ArrayList<FLBDetail>();
int i=0;
while(rs.next()){
i++;
FLBDetail domainObj=new FLBDetail();
domainObj.setRank(i);
domainObj.setRep(rs.getString(1));
domainObj.setDirects(rs.getString(2));
domainObj.setRepOptyNo(applyNoFormat(rs.getString(3)));
domainObj.setOptyNo(applyNoFormat(rs.getString(4)));
domainObj.setTotal(applyDoubleFormat(rs.getString(5)));
domainObj.setForecast(applyDoubleFormat(rs.getString(6)));
domainObj.setPipeline(applyDoubleFormat(rs.getString(7)));
domainObj.setUpside(applyDoubleFormat(rs.getString(8)));
domainObj.setWon(applyDoubleFormat(rs.getString(9)));
domainObj.setImgUrl(rs.getString(10));
domainList.add(domainObj);
}
return domainList;
}
public List retrieveFLB()抛出SQLException,ParseException{
FLBSqlQueries queryObj=新的FLBSqlQueries();
字符串查询=queryObj.retrieveflbquery();
DataRetrieval obj=新建DataRetrieval();
ResultSet rs=obj.executeQuery(查询);
System.out.println(查询);
List domainList=新建ArrayList();
int i=0;
while(rs.next()){
i++;
FLBDetail domainObj=新的FLBDetail();
setRank域名(一);
domainObj.setRep(rs.getString(1));
domainObj.setDirects(rs.getString(2));
domainObj.setRepOptyNo(applyNoFormat(rs.getString(3));
domainObj.setOptyNo(applyNoFormat(rs.getString(4));
setTotal(applyDoubleFormat(rs.getString(5));
setForecast(applyDoubleFormat(rs.getString(6));
setPipeline(applyDoubleFormat(rs.getString(7));
setUpside(applyDoubleFormat(rs.getString(8));
setWon(applyDoubleFormat(rs.getString(9));
domainObj.setImgUrl(rs.getString(10));
domainList.add(domainObj);
}
返回域名列表;
}
现在,服务端点类通过调用上述方法并使用返回数组,将domainList数组对象转换为json数组
此外,这个json对象随后在$.ajax()前端调用中被调用,并被绑定到UI元素
如果您需要任何其他信息,请告诉我。我解决了一个类似的问题,客户机(GUI)用于根据广泛的条件进行广泛的搜索,而搜索结果有时太大,GUI适配器无法处理。我解决这个问题的方法是创建一个活动侦听器代理,该代理在数据网格的每个滚动上使用先前发送记录的最后一个标识符触发一个rest调用,并带来增量增量增量结果。您需要设置阈值,如果达到阈值,则使用上述协议。但是请记住,您并不是在进行增量DB调用,而是对内存中已经有数据的服务API的rest调用。在后端对数据进行分页,实现一个数据存储,可以从前端获取一页数据,数据存储可以缓存加载的数据,如果达到另一个新的加载请求,则会中止以前的加载请求,您的表组件可以支持显示不连续的数据集。如果您共享代码,我们可能会为您提供更多帮助。