Я использую Grails 2.4.0 и пытаюсь выполнить массовую загрузку данных через CSV-файл, я использую с помощью NewSession для этой работы и использую этот сеанс для загрузки данных в базу данных.в то время как я вызываю функцию сохранения, она автоматически сбрасывается и все, только одна запись сохраняется, и программа не запускается после нее.Я пробовал различные методы, такие как cleanupgorm (), withTransactions, withSession, но все методы медленные и сброса вручную не происходит.Что я хочу, чтобы очистить вручную после 1000 записей или 100 записей, чтобы процесс стал быстрее.Кроме того, я работал над Grails 3.3.4 и Grails 2.4.0, и «def SessionFactory» там не вводится.Я не могу понять это
Вот мой код:
Caller.withNewSession { session ->
def count = 0
Transaction tx = session.beginTransaction()
try {
groovyFile.eachLine {
def callCallerList = [:]
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
Date resultdate = new
Date(System.currentTimeMillis())
String[] tagData = it.split(',')
if (tagData.length != 0) {
def caller
//Saving caller
try {
caller = new
Caller(callingNumber:tagData.getAt(0), callerName:
tagData.getAt(1))
if (caller.validate()) {
if (session.save(caller)) {
cout = 1
println(count)
}
} else {
caller.errors.allErrors.each {
println it
}
}
} catch (Exception ex) {
log.error(ex.getMessage())
}
//Call Caller List
switch (tagData.length) {
case 1:
callCallerList = createCallCallerList(null, null, caller,
callerList)
break
case 2:
callCallerList = createCallCallerList(null, null, caller,
callerList)
break
case 3:
callCallerList = createCallCallerList(tagData.getAt(2), null,
caller, callerList)
break
case 4:
callCallerList = createCallCallerList(tagData.getAt(2),
tagData.getAt(3), caller, callerList)
break
}
}
if (!tagData.getAt(0)) {
log.error "Error in contact validator and error is "
invalidBuilder.append("*** " + sdf.format(resultdate) + "*** " +
tagData + "\n\r")
invalidBuilder.append("Calling number not provided. It is a
mandatory field." + "\n\r")
invalidContactsCount++
callCallerList.message = "OK"
}
if (callCallerList.message != "OK") {
log.error "Error in contact
validator and error is "
invalidBuilder.append("*** " +
sdf.format(resultdate) + "*** " +
tagData + "\n\r")
invalidBuilder.append(callCallerList?.message + "\n\r")
invalidContactsCount++
count++
if(count.mod(200) == 0)
{
session.flush()
session.clear()
}
}
tx.commit()
session.clear()
}
catch (Exception ex) {
// println ex.getMessage()
log.error("Exception while reading the file
and exception is ", ex)
}
}