我有一个问题,我在另一个问题中解决了,但这是一个更大的问题:
使用 STS 的默认 Grails 项目具有 Spring/Hibernate。当 Grails 应用程序加载时,我的包含 100,000 多个域对象的数据库似乎已加载到内存中。这是否在 Hiberate/ORM 层,我不知道。
Pre DB domain object load (400 MB start up)
Post DB domain object load (900 MB start up)
这没有任何引导数据。没有开箱即用的应用程序性能。只是一个干净的启动和我的域对象。
我可以使用显示器,但我得到相同的答案。这似乎是配置。如何在 Grails 中设置 Hibernate 以不将这些对象加载到内存中?
这是 datasource.groovy 文件:
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "xxx"
password = "xxx"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = true
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/mydb"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/mydb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://localhost/mydb"
}
}
}
这让我很生气,因为我尝试了所有类型的调整来启动文件(引导、数据源/休眠、配置等——我什至不记得我尝试过的每一种不同的东西)。
* 编辑 * 我没有对我的对象使用渴望获取。只是默认懒惰。