Using spring.main.lazy-initialization=true causes @Cacheable to not work.
Test sample repo: https://github.com/cdalexndr/spring-boot-issue-26470
Spring Boot 2.4.4
Comment From: wilkinsona
Thanks for the sample. You can work around the problem by excluding the CacheInterceptor (a CacheAspectSupport) from lazy initialization:
@Bean
LazyInitializationExcludeFilter eagerCacheAspectSupportInitialization() {
return LazyInitializationExcludeFilter.forBeanTypes(CacheAspectSupport.class);
}
It's a SmartInitializingSingleton and the afterSingletonsInstantiated() callback isn't invoked for singleton beans that are lazily initialized. This leaves it in an uninitialised state and stops caching from working.
Comment From: wilkinsona
We want to investigate whether we should exclude all SmartInitializingSingletons from lazy initialization or tackle them on a case-by-case basis. A concern with doing it for all is that it may result in a cascade of eager initialization that removes much of the benefit of lazy initialization.
Comment From: wilkinsona
Our main concern was Hibernate via HibernateMetricsAutoConfiguration (a SmartInitializingSingleton), but it is already eagerly initialized due to LocalContainerEntityManagerFactoryBean being LoadTimeWeaverAware.
Comment From: HustonPeng
I ran it under tomcat, it returns 0 always.
So i guess maybe the @AutoConfigureCache has a problem for setup test.