Grails: сеанс и транзакции не работают должным образом (происходит сбой или отсоединение после одного сброса) - PullRequest
0 голосов
/ 28 ноября 2018

Я использую 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)

  }
}
...