【发布时间】:2015-09-08 21:51:33
【问题描述】:
我们有一个场景,我们不断地从表中读取数据,而另一个应用程序正在向该表中插入记录。根据我们当前的实现,我们在一段时间后使用 Spring 的 JdbcTemplate 轮询(在该表上执行 SQL)新记录。
我正在考虑通过某种方式实现流式 ResultSet,这样我就可以继续从 ResultSet 读取表数据,而无需一次又一次地执行 SQL。
编辑:从当前实现中添加代码 sn-p:
String SQL = "SELECT * FROM ACTIONSTATUS WHERE STATUS = 'FAILED' and ALERTID > :alertId";
public static void fetchActionStatus(NamedParameterJdbcTemplate template, HashMap<String, String> paramMap, String fetchSql) throws Exception{
int i = 0;
List<Map<String, Object>> results = null;
while(true){
if(results == null || results.size() == i){
results = template.queryForList(SQL, paramMap);
i = 0;
}else{
Map<String, Object> row = results.get(i);
// SOME DATA PROCESSING WHICH MAY TAKE XX MILISEC.
System.out.println("ALERTID: " + row.get("ALERTID").toString() + " ACTIONID: " + row.get("ACTIONID").toString() + " STATUS: " +row.get("STATUS").toString());
Thread.sleep(100);
paramMap.put("alertId", row.get("ALERTID").toString());
i++;
}
}
}
其他一些应用程序在 ACTIONSTATUS 表中随机插入新记录,我们需要持续监控 ACTIONSTATUS 表以处理所有记录。我们当前的实现运行良好,没有任何问题。我们正在寻找其他解决方案来优化这种方法,以某种方式流式传输 ResultSet 而无需一次又一次地执行 SQL。
【问题讨论】:
-
向我们展示你到目前为止所做的事情..
-
这似乎不是正确的设计,为什么不将数据流式传输给工作人员,一旦处理完毕,它就会保存到表中?
-
@Bond-JavaBond 感谢您的回复,我刚刚为我的问题添加了更多详细信息。你能建议我另一种获取数据的方法吗?
-
@prmottajr 我们无法控制其他应用程序。
-
在 Oracle 中,您将为此使用 AQ...“不幸的是”,目前 SQL Server 中没有等效功能。
标签: java sql-server-2008 jdbc spring-jdbc