使用的Nutz 1.r.66版本jar,数据源连接池用的druid-1.1.11。
在使用dao.fastInsert插入数据的时候,总是插入第七十几条的时候就报异常(NutDaoRunner140行报NPE),然后看了源码的注释【// 高并发时,从数据库连接池获取连接就已经抛错误,所以conn可能为null的】,表示比较蒙圈,就单线程再执行,不存在高并发呢,不知可有解决办法吗?或者避坑方式。
void org.nutz.dao.impl.sql.run.NutDaoRunner._runWithoutTransaction(DataSource dataSource, ConnCallback callback)
public void _runWithoutTransaction(DataSource dataSource, ConnCallback callback) {
Connection conn = null;
// 开始一个连接
try {
conn = selectDataSource(null, dataSource, callback).getConnection();
// 开始真正运行
runCallback(conn, callback);
// 完成提交
if (!conn.getAutoCommit())
conn.commit();
}
// 异常回滚
catch (Exception e) {
try {
if (conn != null) // 高并发时,从数据库连接池获取连接就已经抛错误,所以conn可能为null的
conn.rollback();
}
catch (Exception e1) {}// TODO 简单记录一下?
if (e instanceof DaoException)
throw (DaoException)e;
throw new DaoException(e);
}
// 保证释放资源
finally {
if (null != conn) {
// 关闭链接
try {
conn.close();
}
catch (SQLException closeE) {
if (log.isWarnEnabled())
log.warn("Fail to close connection!", closeE);
}
}
}
}