【问题标题】:Setting flag in database while inserting large xml插入大型xml时在数据库中设置标志
【发布时间】:2016-01-04 18:07:09
【问题描述】:

我有一个服务可以读取 xml 并插入 mysql 数据库。可能有大文件或小文件,这些文件将在队列中。我在另一个表中有不同的标志来表示对这些文件所做的事情。如果正在读取一个文件,它会说正在加载,如果它正在等待读取,它会说未读取,如果它在表中,它会说加载。我遇到的问题是在休眠会话完成之前似乎没有设置标志。大部分工作都发生在服务中,但我调用了一个 .groovy 类,它使用 save(flush: true) 设置该状态。有没有办法强制会话在仍在读取时设置该标志,并且在会话完成?

【问题讨论】:

  • 问题是您的事务隔离级别不允许在事务未完成时读取数据。您可以不使用事务,使用单独的事务或更改隔离级别以允许“脏读”(或类似的东西)。
  • 你能告诉我分开交易的方向吗?

标签: mysql hibernate grails


【解决方案1】:

我也有类似的过程;它从 .csv 文件中读取数十万行,我们需要在加载结束之前与数据进行交互。定期(每 1,000 条记录),我们调用一个方法来刷新会话。你能实现这样的东西吗?

def cleanUpGorm() {
  def propertyInstanceMap = org.codehaus.groovy.grails.plugins.DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP
  def session = sessionFactory.currentSession
  session.flush()
  session.clear()
  propertyInstanceMap.get().clear()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多