
目录
在 Spring Boot 4 的众多新特性中,有一个功能并不"起眼",却可能彻底改变你对 Spring Data JPA 启动性能和稳定性 的认知。
它就是 Spring Data AOT (Ahead of Time) Repositories。
很多人第一次听到它,可能只会觉得:
又是 AOT,应该和启动快一点有关吧?
但真正深入了解后你会发现,它做的远不止"快一点"这么简单。
在传统的 Spring Data 应用中,每次启动,框架都会做大量工作。
比如这样一个方法:
List<Book> findByNameContainingIgnoreCase(String name);Spring Data 在启动时需要:
Repository 接口find → SELECT 查询,ByName → WHERE 条件,Containing → LIKE,IgnoreCase → UPPER()这些反射、解析、构建逻辑,全部发生在应用启动阶段,并且每次启动都会重复。
如果你的应用包含大量 Repository 接口、查询方法和复杂的派生查询规则,就会导致:
更糟的是 错误发现得太晚。
如果不小心将方法写成这样:
// 拼写错误
List<Book> findByNammeContainingIgnoreCase(String name);在 Spring Boot 3 中:
mvn clean install 成功No property 'namme' found for type 'Book'Spring Boot 4 引入的 Spring Data AOT Repositories,核心思想只有一句话:
能在构建期做的事,绝不留到运行期。
当你执行:
mvn clean packageAOT 处理器会在 编译期 完成:
构建完成后,你可以在 target/classes 目录中看到:
BookRepositoryImpl__AotRepository.class这个类中已经包含了:
比如:
public List<Book> findByNameContainingIgnoreCase(String var1) {
String var2 = "SELECT b FROM book b WHERE UPPER(b.name) LIKE UPPER(:name)";
Query var3 = this.entityManager.createQuery(var2);
var3.setParameter("name", var1);
return var3.getResultList();
}也就是说:
应用启动时,不再重复解析、不再反射、不再动态构建。
启动速度显著提升,内存占用显著下降。
如果:
@Query JPQL 语法错了?只要开启了 AOT 处理,错误都能在构建过程中提前发现。
我们还可以在 IDE 中设置断点,在需要时调试语句。
要启用 AOT 处理,只需要在 pom.xml 中配置 Spring Boot 插件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
</plugin>从功能列表上看,它可能只是 Spring Boot 4 中的一项改动。
但从工程角度看,它意味着:
如果你正在:
强烈建议你试一试 Spring Data AOT。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。