现在的位置: 首页 > 综合 > 正文

spring+ibatis 批处理

2018年02月11日 ⁄ 综合 ⁄ 共 1517字 ⁄ 字号 评论关闭

引用:http://ftmxqq-gmail-com.javaeye.com/category/105128?show_full=true

 

public void batchInsert(final ConcurrentHashMap<String, SpiderUrl> urls) {
getSqlMapClientTemplate().execute(new SqlMapClientCallback() {

@Override
public Object doInSqlMapClient(SqlMapExecutor sqlmapexecutor)
throws SQLException {
// TODO Auto-generated method stub
sqlmapexecutor.startBatch();
int i = 0;
Set<String> keys = urls.keySet();
for (String url : keys) {
SpiderUrl spiderUrl = urls.get(url);
// System.out.println("insert:" + spiderUrl);
sqlmapexecutor.insert("url.insert", spiderUrl);
i++;
if (i == 2000) {
sqlmapexecutor.executeBatch();
i = 0;

}
}
sqlmapexecutor.executeBatch();
return null;
}

});
}
最重要一点:
datasource配置中增加一行:<property name="defaultAutoCommit" value="false"/>
但是这样处理,所有的其它非批处理操作均不能插入数据。所以改用下面的方式
public void batchInsert(final ConcurrentHashMap<String, SpiderUrl> urls) {
SqlMapClient client = getSqlMapClient();
Connection con=null;
boolean autoCommit=false;
try {
con = client.getDataSource().getConnection();
autoCommit=con.getAutoCommit();
con.setAutoCommit(false);
client.setUserConnection(con);
client.startBatch();
int i = 0;
Set<String> keys = urls.keySet();
for (String url : keys) {
SpiderUrl spiderUrl = urls.get(url);
// System.out.println("insert:" + spiderUrl);
client.insert("url.insert", spiderUrl);
i++;
if (i == 2000) {
client.executeBatch();
i = 0;

}
}
client.executeBatch();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
con.setAutoCommit(autoCommit);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
datasource配置中增加一行:<property name="defaultAutoCommit" value="true"/>

抱歉!评论已关闭.