六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 282|回复: 0

内置数据库之迷

[复制链接]

升级  37.33%

28

主题

28

主题

28

主题

秀才

Rank: 2

积分
106
 楼主| 发表于 2013-1-14 23:43:12 | 显示全部楼层 |阅读模式
对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"}}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表