最近一直都在做爬虫系统,因为后台改需求,所以修改了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.连接等待(数据库连接池)暂时知道的就这么多