Grails和Hibernate—许多具有许多属性的域对象

Grails和Hibernate—许多具有许多属性的域对象,hibernate,grails,sts-springsourcetoolsuite,Hibernate,Grails,Sts Springsourcetoolsuite,我在另一个问题中解决了一个问题,但这是一个更大的问题: 使用STS的默认Grails项目有Spring/Hibernate。当Grails应用程序加载时,我的100000多个域对象的数据库似乎加载到内存中。我不知道这是否在Hibrate/ORM层 Pre DB domain object load (400 MB start up) Post DB domain object load (900 MB start up) 这没有任何引导数据。没有现成的应用程序性能。只是一个干净的启动和我的域对

我在另一个问题中解决了一个问题,但这是一个更大的问题:

使用STS的默认Grails项目有Spring/Hibernate。当Grails应用程序加载时,我的100000多个域对象的数据库似乎加载到内存中。我不知道这是否在Hibrate/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"
    }
}
}
这让我很难受,因为我尝试了所有类型的调整来启动文件(引导、数据源/hibernate、配置等等,我甚至记不起我尝试过的每一件事)

*编辑*
我没有对我的对象使用即时抓取。只是默认的懒惰。

你是如何得到你的前/后内存号的?在我看来,除非你的BootStrap.groovy文件中有一个非常奇怪的插件或其他东西,否则你的整个域对象集都不会加载到内存中

要想知道这是否真的发生了,最简单的方法可能是打开hibernate的跟踪级别日志记录:

trace 'org.hibernate.SQL'
如果它真的从数据库中加载了所有的内存,那么当应用程序启动时,你会看到大量的SQL查询


为了进一步研究,我可能会先打开,然后将
jconsole
连接到正在运行的grails实例,以深入了解加载的内容和未加载的内容的详细信息。

如何获取前/后内存号?在我看来,除非你的BootStrap.groovy文件中有一个非常奇怪的插件或其他东西,否则你的整个域对象集都不会加载到内存中

要想知道这是否真的发生了,最简单的方法可能是打开hibernate的跟踪级别日志记录:

trace 'org.hibernate.SQL'
如果它真的从数据库中加载了所有的内存,那么当应用程序启动时,你会看到大量的SQL查询


为了进一步研究,我可能会考虑启用,然后将
jconsole
连接到正在运行的grails实例,以深入了解加载内容和未加载内容的详细信息。

使用SQL跟踪的好提示!关于痕迹的绝妙提示。我会尝试一下。使用SQL跟踪的好提示!关于痕迹的绝妙提示。我试试看。