Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Beyond the Magic - Spring Data AOT Repositories

Beyond the Magic - Spring Data AOT Repositories

Avatar for Christoph Strobl

Christoph Strobl

November 15, 2025
Tweet

More Decks by Christoph Strobl

Other Decks in Programming

Transcript

  1. Beyond the Magic Ahead of Time Code Generation for Spring

    Data Repositories Christoph Strobl, Spring Data Committer
  2. The following is intended to outline the general direction of

    future development. It is intended for information purposes only and may not be incorporated into any contract. Any information regarding offerings, future updates or other planned modifications is subject to ongoing evaluation and is subject to change. This information is provided without warranty or any kind, express or implied, and is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making business decisions. The development, release, and timing of any features or functionality described in this presentation remain at the sole discretion of Broadcom. Broadcom has no obligation to update forward looking information in this presentation. Presentation contains forward looking information
  3. The following is intended to outline the general direction of

    future development. It is intended for information purposes only and may not be incorporated into any contract. Any information regarding offerings, future updates or other planned modifications is subject to ongoing evaluation and is subject to change. This information is provided without warranty or any kind, express or implied, and is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making business decisions. The development, release, and timing of any features or functionality described in this presentation remain at the sole discretion of Broadcom. Broadcom has no obligation to update forward looking information in this presentation. Presentation contains forward looking information Spring Data 2025.1.0 already here 🎉
  4. interface Repo<Employee, String> extends . . . { Repository CrudRepository

    findAll(); findById(...) count(); save(...); delete(...); ... PagingAndSorting Repository findAll(Page); findAll(Sort); Proxy Default Implementation Store Specific List<Employee> f i ndAll(); long count(); Predefined methods List<Employee> f i ndByFirstName(String name); Derived Finder Method Custom Impl.
  5. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) List<Employee> f i ndByAddressLocationWithin(Polygon area)
  6. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> f i ndByAddressLocationWithin(Polygon area)
  7. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> f i ndByAddressLocationWithin(Polygon area) Page<Employee> f i ndByLastname(Pageable page)
  8. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> searchByAddressLocationNear(GeoJsonPoint location) List<Employee> f i ndByAddressLocationWithin(Polygon area) Page<Employee> f i ndByLastname(Pageable page)
  9. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> searchByAddressLocationNear(GeoJsonPoint location) List<Employee> f i ndByAddressLocationWithin(Polygon area) Page<Employee> f i ndByLastname(Pageable page) Stream<Employee> streamByLastname(String lastname)
  10. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> searchByAddressLocationNear(GeoJsonPoint location) List<Employee> f i ndByAddressLocationWithin(Polygon area) Page<Employee> f i ndByLastname(Pageable page) Stream<Employee> streamByLastname(String lastname) @Tailable F l ux<Employee> streamByLastname(String lastname)
  11. List<Employee> f i ndByFirstName(String name) List<Employee> f i ndByFirstNameAndLastname(String f

    i rstname, String lastname) Employee getBySsn(String ssn) List<Employee> searchByAddressLocationNear(GeoJsonPoint location) List<Employee> f i ndByAddressLocationWithin(Polygon area) Page<Employee> f i ndByLastname(Pageable page) Stream<Employee> streamByLastname(String lastname) @Tailable F l ux<Employee> streamByLastname(String lastname) Long countBySalarayGreaterThan(double salary)
  12. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 with PID 81295 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO RepositoryConf i gurationDelegate - Finished Spring Data repository scanning in 18 ms. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.739 seconds (process running for 1.076)
  13. ERROR example.springdata.aot.App - UncategorizedMongoDbException: Command failed with error 15975 (Location15975)

    : '$sort key . . . at o.s.d.m.c.MongoExceptionTranslator.doTranslateException(MongoExceptionTranslator at o.s.d.m.c.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTran at o.s.d.m.c.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:3175) at o.s.d.m.c.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:3086) at o.s.d.m.c.MongoTemplate.doFind(MongoTemplate.java:2776) at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFipera at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.all(ExecutableFindOper at o.s.d.m.r.q.AbstractMongoQuery.lambda$getExecution$2(AbstractMongoQuery.java:190) at o.s.d.m.r.q.AbstractMongoQuery.doExecute(AbstractMongoQuery.java:146) at o.s.d.m.r.q.AbstractMongoQuery.execute(AbstractMongoQuery.java:119) at o.s.d.r.c.s.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:169) at o.s.d.r.c.s.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at o.s.d.r.c.s.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInter at o.s.d.r.c.s.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterce at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:1 at at o.s.d.m.r.s.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterc) at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at o.s.a.f.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:222) at jdk.proxy2/jdk.proxy2.$Proxy53(Unknown Source)
  14. ERROR example.springdata.aot.App - UncategorizedMongoDbException: Command failed with error 15975 (Location15975)

    : '$sort key . . . at o.s.d.m.c.MongoExceptionTranslator.doTranslateException(MongoExceptionTranslator at o.s.d.m.c.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTran at o.s.d.m.c.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:3175) at o.s.d.m.c.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:3086) at o.s.d.m.c.MongoTemplate.doFind(MongoTemplate.java:2776) at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFipera at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.all(ExecutableFindOper at o.s.d.m.r.q.AbstractMongoQuery.lambda$getExecution$2(AbstractMongoQuery.java:190) at o.s.d.m.r.q.AbstractMongoQuery.doExecute(AbstractMongoQuery.java:146) at o.s.d.m.r.q.AbstractMongoQuery.execute(AbstractMongoQuery.java:119) at o.s.d.r.c.s.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:169) at o.s.d.r.c.s.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at o.s.d.r.c.s.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInter at o.s.d.r.c.s.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterce at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:1 at at o.s.d.m.r.s.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterc) at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at o.s.a.f.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:222) at jdk.proxy2/jdk.proxy2.$Proxy53(Unknown Source) 😶🌫
  15. interface Repo<Employee, String> extends . . . { Repository CrudRepository

    findAll(); findById(...) count(); save(...); delete(...); ... PagingAndSorting Repository findAll(Page); findAll(Sort); Proxy Default Implementation Store Specific List<Employee> f i ndAll(); long count(); Predefined methods List<Employee> f i ndByFirstName(String name); Derived Finder Method Custom Impl. AOT Impl.
  16. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.595 seconds (process running for 0.936)
  17. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO RepositoryConf i gurationDelegate - Finished Spring Data repository scanning in 18 ms. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.595 seconds (process running for 0.936) no longer needed faster startup
 (was 0.793) uses AOT contributions \ö/
  18. ERROR example.springdata.aot.App - UncategorizedMongoDbException: Command failed with error 15975 (Location15975)

    : '$sort key . . . at o.s.d.m.c.MongoExceptionTranslator.doTranslateException(MongoExceptionTranslator at o.s.d.m.c.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTran at o.s.d.m.c.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:3175) at o.s.d.m.c.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:3086) at o.s.d.m.c.MongoTemplate.doFind(MongoTemplate.java:2776) at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFipera at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.all(ExecutableFindOper at o.s.d.r.c.s.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:169) at o.s.d.r.c.s.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at o.s.d.r.c.s.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInter at o.s.d.r.c.s.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterce at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:1 at o.s.d.m.r.s.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterc) at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at o.s.a.f.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:222) at jdk.proxy2/jdk.proxy2.$Proxy53.f i ndJustUsernameBy(Unknown Source) at e.s.a.UserRepositoryImpl _ _ AotRepository.f i ndJustUsernameBy(UserRepositoryImpl _ _ AotRepository.java:69) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at o.s.a.s.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359)
  19. ERROR example.springdata.aot.App - UncategorizedMongoDbException: Command failed with error 15975 (Location15975)

    : '$sort key . . . at o.s.d.m.c.MongoExceptionTranslator.doTranslateException(MongoExceptionTranslator at o.s.d.m.c.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTran at o.s.d.m.c.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:3175) at o.s.d.m.c.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:3086) at o.s.d.m.c.MongoTemplate.doFind(MongoTemplate.java:2776) at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFipera at o.s.d.m.c.ExecutableFindOperationSupport$ExecutableFindSupport.all(ExecutableFindOper at o.s.d.r.c.s.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:169) at o.s.d.r.c.s.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) at o.s.d.r.c.s.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInter at o.s.d.r.c.s.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterce at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:1 at o.s.d.m.r.s.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterc) at o.s.a.f.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at o.s.a.f.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:222) at jdk.proxy2/jdk.proxy2.$Proxy53.f i ndJustUsernameBy(Unknown Source) at e.s.a.UserRepositoryImpl _ _ AotRepository.f i ndJustUsernameBy(UserRepositoryImpl _ _ AotRepository.java:69) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at o.s.a.s.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) navigable & debuggable
  20. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.595 seconds (process running for 0.936) uses AOT contributions \ö/
  21. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-M2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-M2, Spring v7.0.0-M8 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.595 seconds (process running for 0.936) JVM Startup Class Loading Verification, Preparation, Resolution Class Initialization Code Execution time
  22. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-M2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 17.0.4.1 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-M2, Spring v7.0.0-M8 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.595 seconds (process running for 0.936) JVM Startup Class Loading Verification, Preparation, Resolution Class Initialization Code Execution time JEP 483 - Ahead of Time Class Loading & Linking since Java 24
  23. . . . [0,132s][info][class,load] org.springframework.data.mongodb.repository.MongoRepository source: shared objects f i

    le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.SimpleMongoRepository source: shared object [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoRepositoryFactory$MongoQueryLookupStra objects f i le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoEntityInformationSupport source: share [0,132s][info][class,load] org.springframework.data.mongodb.repository.query.MongoEntityInformation source: shared objects [0,132s][info][class,load] org.springframework.data.mongodb.repository.aot.MongoAotRepositoryFragmentSupport source: share [0,132s][info][class,load] example.springdata.aot.UserRepositoryImpl _ _ AotRepository source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.PersistenceExceptionTranslationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AopInfrastructureBean source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.ProxyProcessorSupport source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor sourc f i le [0,132s][info][class,load] org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor source: shared [0,132s][info][class,load] org.springframework.stereotype.Repository source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.support.AbstractPointcutAdvisor source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.Post _ _ Accessor_cu5r0l source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.User _ _ Accessor_cu2hga source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizers source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizer source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.ExecutionListenersTransactionManagerCustomiz objects f i le . . .
  24. . . . [0,132s][info][class,load] org.springframework.data.mongodb.repository.MongoRepository source: shared objects f i

    le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.SimpleMongoRepository source: shared object [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoRepositoryFactory$MongoQueryLookupStra objects f i le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoEntityInformationSupport source: share [0,132s][info][class,load] org.springframework.data.mongodb.repository.query.MongoEntityInformation source: shared objects [0,132s][info][class,load] org.springframework.data.mongodb.repository.aot.MongoAotRepositoryFragmentSupport source: share [0,132s][info][class,load] example.springdata.aot.UserRepositoryImpl _ _ AotRepository source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.PersistenceExceptionTranslationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AopInfrastructureBean source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.ProxyProcessorSupport source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor sourc f i le [0,132s][info][class,load] org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor source: shared [0,132s][info][class,load] org.springframework.stereotype.Repository source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.support.AbstractPointcutAdvisor source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.Post _ _ Accessor_cu5r0l source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.User _ _ Accessor_cu2hga source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizers source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizer source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.ExecutionListenersTransactionManagerCustomiz objects f i le . . . it’s right here
  25. . . . [0,132s][info][class,load] org.springframework.data.mongodb.repository.MongoRepository source: shared objects f i

    le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.SimpleMongoRepository source: shared object [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoRepositoryFactory$MongoQueryLookupStra objects f i le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoEntityInformationSupport source: share [0,132s][info][class,load] org.springframework.data.mongodb.repository.query.MongoEntityInformation source: shared objects [0,132s][info][class,load] org.springframework.data.mongodb.repository.aot.MongoAotRepositoryFragmentSupport source: share [0,132s][info][class,load] example.springdata.aot.UserRepositoryImpl _ _ AotRepository source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.PersistenceExceptionTranslationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AopInfrastructureBean source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.ProxyProcessorSupport source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor sourc f i le [0,132s][info][class,load] org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor source: shared [0,132s][info][class,load] org.springframework.stereotype.Repository source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.support.AbstractPointcutAdvisor source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.Post _ _ Accessor_cu5r0l source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.User _ _ Accessor_cu2hga source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizers source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizer source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.ExecutionListenersTransactionManagerCustomiz objects f i le . . . it’s right here
  26. . . . [0,132s][info][class,load] org.springframework.data.mongodb.repository.MongoRepository source: shared objects f i

    le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.SimpleMongoRepository source: shared object [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoRepositoryFactory$MongoQueryLookupStra objects f i le [0,132s][info][class,load] org.springframework.data.mongodb.repository.support.MongoEntityInformationSupport source: share [0,132s][info][class,load] org.springframework.data.mongodb.repository.query.MongoEntityInformation source: shared objects [0,132s][info][class,load] org.springframework.data.mongodb.repository.aot.MongoAotRepositoryFragmentSupport source: share [0,132s][info][class,load] example.springdata.aot.UserRepositoryImpl _ _ AotRepository source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.PersistenceExceptionTranslationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AopInfrastructureBean source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.ProxyProcessorSupport source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor sourc f i le [0,132s][info][class,load] org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor source: shared [0,132s][info][class,load] org.springframework.stereotype.Repository source: shared objects f i le [0,132s][info][class,load] org.springframework.aop.support.AbstractPointcutAdvisor source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.Post _ _ Accessor_cu5r0l source: shared objects f i le [0,132s][info][class,load] example.springdata.aot.User _ _ Accessor_cu2hga source: shared objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizationAutoConf i gura objects f i le [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizers source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.TransactionManagerCustomizer source: shared [0,132s][info][class,load] org.springframework.boot.transaction.autoconf i gure.ExecutionListenersTransactionManagerCustomiz objects f i le . . . optimized to access properties
  27. > java -XX : AOTCache=app.aot -Dspring.aot.enabled=true - jar spring -

    data - mongodb - aot - optimization.jar Java AOT Cache Spring AOT support
  28. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 25 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.177 seconds (process running for 0.436) faster startup
 Java 25 > java -XX : AOTCache=app.aot -Dspring.aot.enabled=true - jar spring - data - mongodb - aot - optimization.jar Java AOT Cache Spring AOT support
  29. . _ _ _ _ _ _ _ _ _

    /\\ / _ _ _ '_ _ _ _ _(_)_ _ _ _ _ _ \ \ \ \ ( ( )\ _ _ _ | '_ | '_| | '_ \ / _` | \ \ \ \ \\/ _ _ _ )| |_)| | | | | | | (_| | ) ) ) ) ' | _ _ _ _ | . _ _ | _ | | _ | _ | |_\ _ _ , | / / / / = = = = = = = = = | _ | = = = = = = = = = = = = = = | _ _ _ / = / _/_/_/ : : Spring Boot : : (v4.0.0-RC2) INFO example.springdata.aot.App - Starting AOT-processed App v2.0.0.BUILD-SNAPSHOT using Java 25 DEBUG example.springdata.aot.App - Running with Spring Boot v4.0.0-RC2, Spring v7.0.0 INFO example.springdata.aot.App - No active prof i le set, falling back to 1 default prof i le: "default" INFO RepositoryConf i gurationDelegate - Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server INFO example.springdata.aot.App - Started App in 0.177 seconds (process running for 0.436) faster startup
 was 0.793 (java) was 0.595 (aot) Java 25 > java -XX : AOTCache=app.aot -Dspring.aot.enabled=true - jar spring - data - mongodb - aot - optimization.jar Java AOT Cache Spring AOT support