Grails延迟加载

本文介绍了Grails中Airport与Flights的一对多关系配置及不同加载策略的影响。使用静态属性fetchMode来设置eager加载策略可以减少数据库查询次数,避免N+1查询问题。同时,也介绍了如何通过定义non-lazy来实现这一目标。
class Airport {
String name
static hasMany = [flights:Flight]
}
class Flight {
String number
static belongsTo = [airport:Airport]
}

Airport与Flights是一对多关系,Grails使用的是[b]延迟加载[/b]。
这样会产生[color=red]N+1[/color]个查询。
另外一个方法:
static fetchMode = [flights:"eager"]
使用[color=red]eager策略[/color]就可以一次性加载所有数据。

[color=blue]还有就是可以定义为non-lazy。[/color]
Grails 是基于 Groovy 和 Spring 框架的全栈 Web 开发框架,其开发效率高,但在项目较大或配置不合理时,启动时间可能较长。优化 Grails 项目的启动时间可以从多个方面入手: ### 1. 减少依赖和插件 过多的依赖和插件会显著增加类加载时间和配置解析时间。建议对 `build.gradle` 或 `BuildConfig.groovy` 中的依赖进行精简,移除不必要的插件和库。 - 使用 `grails dependency-report` 查看所有引入的依赖,并分析是否有冗余。 - 对于不常用的插件,可以考虑按需加载或移除[^1]。 ### 2. 启用懒加载配置 Grails 默认会在启动时加载所有 Bean,可以通过配置懒加载来延迟某些 Bean 的初始化。 - 在 `application.yml` 或 `application.groovy` 中设置懒加载: ```yaml spring: main: lazy-initialization: true ``` ### 3. 优化 Spring Boot 自动配置 Grails 3+ 基于 Spring Boot,因此可以利用其自动配置排除机制来禁用不需要的自动配置类。 - 在 `application.groovy` 或 `application.yml` 中使用 `spring.autoconfigure.exclude` 排除不必要组件的自动配置类。 ### 4. 使用 GORM 的懒加载 GORM(Grails Object Relational Mapping)默认会加载所有域类的关联对象,可以通过设置关联为懒加载来减少启动时的内存占用和初始化时间。 - 在域类中使用 `static mapping = { lazy: true }` 配置懒加载。 ### 5. 提升 JVM 性能 JVM 的参数配置对启动时间也有显著影响。 - 使用 `-XX:+UseSerialGC` 或 `-XX:+UseParallelGC` 等适合启动阶段的垃圾回收器。 - 适当增加堆内存,避免频繁 GC: ```bash grails -Djvmargs="-Xms512m -Xmx2g" run-app ``` ### 6. 使用 Spring Boot 的 DevTools(开发环境) 在开发环境中,Spring Boot DevTools 可以提供更快的重启速度。 - 在 `build.gradle` 中添加: ```groovy developmentOnly("org.springframework.boot:spring-boot-devtools") ``` ### 7. 预编译 GSP 页面 GSP 页面在首次访问时会进行编译,这会增加首次加载时间。可以在启动时预编译这些页面。 - 在 `Config.groovy` 中启用预编译: ```groovy grails.gsp.enable.reload = false grails.gsp.precompile = true ``` ### 8. 分析启动日志 通过分析启动日志,找出耗时较长的初始化步骤。可以使用 Spring Boot 的 `SpringApplication.setLogStartupInfo(true)` 来输出更详细的启动信息。 ### 9. 使用 GraalVM 原生镜像(高级) 对于生产环境,可以考虑使用 GraalVM 将 Grails 应用编译为原生镜像,从而大幅缩短启动时间。此方法较为复杂,但能显著提升性能[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值