程序停滞不跑的情况

来源:互联网 发布:深圳网络推广惠信 编辑:程序博客网 时间:2024/05/17 02:10

最近一直都在做爬虫系统,因为后台改需求,所以修改了dao操作。

 然后在测试的时候,我测试爬一个网页,没有问题,能一次性爬完(不满60个)。然后测试同时爬几个网页,总是爬到一半程序就停在哪里不动了,刚刚以为是流没关闭的问题,然后测试还是不行,后来根据那一条新闻的信息debug,然后发现程序在执行jdbc操作时,停止运行。

经过别人提醒,可能是数据库连接池的问题,然后修改数据库连接池最大连接数,发现程序可以继续走下去。可以确定可能是因为没有释放数据库连接。

jdbc.update(new PreparedStatementCreator() {   @Override   public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {      PreparedStatement ps = jdbc.getDataSource().getConnection().prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);      int i = 0;      ps.setTimestamp(++i, new Timestamp(article.getSpidertime().getTime()));      ps.setString(++i,article.getTitle());      ps.setTimestamp(++i, new Timestamp(article.getCreateTime().getTime()));      ps.setTimestamp(++i, new Timestamp(article.getUpdateTime().getTime()));      ps.setString(++i,article.getBody());      ps.setInt(++i, article.getClick());      ps.setString(++i,article.getDescription());      ps.setString(++i, article.getKeywords());      ps.setString(++i, article.getMarktime());      ps.setLong(++i, article.getTypeid());      ps.setString(++i,article.getSourceweb());      ps.setString(++i,article.getSource());      ps.setString(++i,article.getWriter());      ps.setString(++i,article.getLitpic());   /* ps.setInt(++i,article.getClick());*/      ps.setInt(++i,article.getArcrank());      ps.setInt(++i,article.getBadpost());      ps.setInt(++i,article.getChannel());      ps.setInt(++i,article.getIsmake());      ps.setInt(++i,article.getLastpost());      ps.setInt(++i,article.getMid());      ps.setInt(++i,article.getMoeny());      ps.setInt(++i,article.getNotpost());      ps.setInt(++i,article.getScores());      ps.setInt(++i,article.getGoodpost());      return ps;   }},keyHolder);
标红处应该修改为
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

具体原因不明。             
然后再去看了下数据库连接超时时间 居然被别人配置成了半个小时,真是郁闷,谁会愿意等半个小时啊。
总结一下程序停滞不跑的情况:
1.死循环
2.死递归
3.流没有关闭
4.连接等待(数据库连接池)
暂时知道的就这么多

0 0
原创粉丝点击