关于Mybatis从几百万条记录返回7万条记录,并在tomcat显示问题

1)由于客户字段并不统一,随时有可能变化,是由Excel上传动态解析Excel形成的一个动态表,所以Mybatis返回,resultType并不是一个具体的Bean ,而是一个List<Map>

<select id=”find” resultType=”java.util.HashMap”
parameterType=”java.util.HashMap”>
${sql}
</select>

数据量小的时候,还不明显,数据量一大,数万条记录,就要了 老命了,用List<Map>解决动态字段的问题,在大数据下 是很不实用的,所以我直接用了JDBC的ResultSet,并用流式打开PreparedStatement

SqlSession session = sqlSessionFactory.openSession();
// List ll=session.selectList(“query”,TableObject.class);
JSONArray vos = new JSONArray();
Connection conn = null;
try {
conn = session.getConfiguration().getEnvironment().getDataSource().getConnection();
PreparedStatement stmt = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
ResultSet rs = stmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();

try {
while (rs.next()) {
JSONObject vo = new JSONObject();
for (int i = 1; i <= columnCount; i++) {
String key = rsmd.getColumnName(i);
String value = rs.getString(i);
vo.put(key, value);
}
vos.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
}

rs.close();
stmt.close();
// conn.close();
} catch (Exception e) {
e.printStackTrace();
}

session.close();

时间立即由几十秒 缩短为 几秒或者10几秒

2) 数据量返回太大,tomcat假死

tomcat的server.xml修改为:

<Connector port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
compression=”on”
compressionMinSize1=”2048″
noCompressionUserAgents=”gozilla, traviata”
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
redirectPort=”8443″ />

即启用tomcat压缩形式,tomcat响应立即 由一分钟以上 缩短为几秒。

 

 

Spring MVC/Boot的精义其实还是@Autowired、Context上下文

Context上下文 其实是一个很古老的概念,打从有Web 容器这个概念。例如Tomcat、WebSphere、Weblogic就有Context上下文这个概念,从最初的JNDI、到EJB,以及Spring MVC倡导的bean注入,无以不体现着 Context上下文的理念在里面

Spring Boot把嵌入式容器和Context上下文弄的依赖外部项少了,发布的成本像比较于EJB,发布成本大大降低了,但还是离不开Context上下文不是,否则@Autowired标签就没有任何意义了。

相比较于Spring boot以及Tomcat的Context、Look up Bean的成本在编译和运行时,容器替你做了一部分工作,分担了look up的成本,但是React的state就比较恶心了,React的组件里面有子组件时,需要通过state交换参数,就没有Context上下文的概念了。

也许是我对前端其实不不太熟悉的缘故吧。

 

4月10号左右,离开了联想的项目组,已经有一个多月了,这一个月来,朋友介绍了一个传统零售企业BI报表的项目,做的我累死了,每天比在联想还累,但是还没签合同,客户也没说付款,哎。

40多岁的老男人,再就业其实真不容易啊。:)

 

这个照片是今天中午在合生会吃饭拍的。不上班,在家附近的庆丰公园溜达,在合生汇溜达,感觉人生还是很美好的。