Grails - 停止app后如何避免回滚

时间:2016-02-15 18:50:16

标签: postgresql grails jdbc

我的应用程序是grails ...当我运行app时,工作正常我可以创建,修改和删除记录但是当我停止应用程序时,表中的数据似乎被回滚

可以采取一些措施来避免这种行为吗?

BuildConfig.groovy

    dependencies {
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.

    // runtime 'mysql:mysql-connector-java:5.1.16'
    runtime 'org.postgresql:postgresql:9.4.1207.jre7'
}

plugins {
    runtime ":hibernate:$grailsVersion"
    runtime ":jquery:1.7.1"
    runtime ":resources:1.1.6"

DataSource.groovy中

dataSource {
pooled = true
driverClassName = "org.postgresql.Driver"
username = "****"
password = "*****"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
    dataSource {
        dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
        url = "jdbc:postgresql://localhost:5432/Prizy_Pricer"
    }
}
test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:postgresql://localhost:5432/Prizy_Pricer"
    }
}
production {
    dataSource {
        dbCreate = "update"
        url = "jdbc:postgresql://localhost:5432/Prizy_Pricer"
        pooled = true
        properties {
           maxActive = -1
           minEvictableIdleTimeMillis=1800000
           timeBetweenEvictionRunsMillis=1800000
           numTestsPerEvictionRun=3
           testOnBorrow=true
           testWhileIdle=true
           testOnReturn=true
           validationQuery="SELECT 1"
        }
    }
}
}

1 个答案:

答案 0 :(得分:2)

命令grails run-app的默认环境是 development 。虽然您为开发环境配置了PostgreSQL数据库,但dbCreate属性设置为 create-drop ,这意味着删除所有表,然后重新启动 - 创造它们。因此,当然,删除表会删除所有数据。以下是dbCreate的可能设置:

  • create - 删除现有架构并在启动时创建架构,首先删除现有表,索引等。
  • create-drop - 与create相同,但在应用程序完全关闭时也会删除表。
  • 更新 - 创建缺少的表和索引,并在不删除任何表或数据的情况下更新当前架构。请注意,这无法正确处理许多架构更改,例如列重命名(您将使用包含现有数据的旧列留下)。
  • 验证 - 不对数据库进行任何更改。将配置与现有数据库架构进行比较并报告警告。任何其他价值 - 什么都不做

您可能希望将开发环境的dbCreate设置更改为更新

一种更好的方法,我认为

我更喜欢将 development 保留在默认的内存数据库中,只需在 BootStrap.groovy 中填充它。这样,数据库可以随时安全地丢弃。有关如何执行此操作的示例,请参阅this