内置数据库之迷
对grails的内置数据库,刚开始接触会很奇怪,为什么每次启动服务器,创建的数据都没有了。原因:
1.grails内置的数据库是hsqldb
2.查看grails-app/conf/DataSource.groovy文件
dataSource { //数据源的公共部分 pooled = true driverClassName = "org.hsqldb.jdbcDriver" username = "sa" password = ""}hibernate { cache.use_second_level_cache = true cache.use_query_cache = true cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'}// 根据环境设定数据源,会覆盖数据源的公共部分environments { development { dataSource { dbCreate = "create-drop" //表示每次服务启动就创建表,关闭就删除表 url = "jdbc:hsqldb:mem:testDb" //数据存储到内存中//以上两点就是为什么在开发环境中会出现数据丢失的原因 } } test { dataSource { dbCreate = "update" url = "jdbc:hsqldb:mem:testDb" } } production { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:prodDb;shutdown=true" } }}
注:对dbCreate三个值解释下,create-drop在上面代码中有讲,update每次启动服务只更新表,不删除表,create会让表保持不变,但在停上grails时,删除数据
修改方法:
1.用内置数据库可以改为文件形式存储
dataSource { //数据源的公共部分 pooled = true driverClassName = "org.hsqldb.jdbcDriver" username = "sa" password = ""}hibernate { cache.use_second_level_cache = true cache.use_query_cache = true cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'}// 根据环境设定数据源,会覆盖数据源的公共部分environments { development { dataSource { dbCreate = "update" //有三个值'create', 'create-drop','update' url = "jdbc:hsqldb:file:prodDb;shutdown=true" //文件形式存储后,启动服务器就不会丢失数据 } } test { dataSource { dbCreate = "update" url = "jdbc:hsqldb:mem:testDb" } } production { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:prodDb;shutdown=true" } }}
2.可以通过修改grails-app/conf/DataSource.groovy指定外部数据库,如:mysql
dataSource { //数据源的公共部分 pooled = truedriverClassName = "com.mysql.jdbc.Driver"username = "root"password = "root" def dialect = org.hibernate.dialect.SQLServerDialect.class;}hibernate { cache.use_second_level_cache=true cache.use_query_cache=true cache.provider_class='org.hibernate.cache.EhCacheProvider'}// 根据环境设定数据源,会覆盖数据源的公共部分environments {development {dataSource {dbCreate = "update" //有三个值'create', 'create-drop','update'url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"}}test {dataSource {dbCreate = "update" url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"}}production {dataSource {dbCreate = "update" // one of 'create', 'create-drop','update'url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"}}}
页:
[1]