【发布时间】:2011-07-03 12:13:05
【问题描述】:
我正在使用 Groovy 在 .csv 文件中执行一些大规模写入。更具体地说,我有一个 Quartz 作业正在运行,并创建了一些发送到 RabbitMQ 队列的 Map 消息。该队列被 10 个消费者使用,并导致生成一些字符串列表。对于列表中的每个元素,我只需将其写入管道分隔的 .csv 文件中。具有写入 .csv 文件的方法的实际服务是标准(单例)事务性 grails 服务。当我记录要写入的行时,一切都很好,但是在文件中,有些行被“破坏”了。我的写作方式是:
def writeRowsToFile(List<String> rows, File file) {
rows.each {row->
file.append("${row}\n")
}
}
最初我使用的是:
file.withWriterAppend {out->
out.write(row.toString())
out.newLine()
}
也得到了同样的东西......
如果出现问题,所有行都会失败。可能是某种竞争条件、并发性还是我不知道还有什么问题?
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
“破碎”是指并非所有字符串都写在行中,在某些迭代中。这行写了一半。我附上了我用来写入文件的代码。从我在日志中看到的内容来看,我正在编写的 String 对象很好,但是当它们被写入文件时,其中一些对象无法完全写入。