# Nothing in application.yml selects a provider. Something still chose one. spring.cache.type : (not set) resolved CacheManager bean : org.springframework.cache.caffeine.CaffeineCacheManager Caffeine is on this module's classpath because a later chapter needs TTL and size bounds. That single dependency moved every cache in the application off the ConcurrentHashMap-backed 'simple' provider. --- the detection order, read out of the enum rather than the documentation --- 1 GENERIC 2 JCACHE 3 HAZELCAST 4 COUCHBASE 5 INFINISPAN 6 REDIS 7 CACHE2K 8 CAFFEINE 9 SIMPLE 10 NONE CacheConfigurations maps CacheType -> configuration class in an EnumMap, so the configurations are imported in this declaration order and the first one whose @ConditionalOnClass matches registers the CacheManager. The rest back off on @ConditionalOnMissingBean. Spring Boot's reference documentation lists this order as Generic, JCache, Hazelcast, Infinispan, Couchbase, Redis, Caffeine, Cache2k, Simple. On 4.1.1 the enum disagrees in two places: COUCHBASE comes before INFINISPAN, and CACHE2K comes before CAFFEINE. The second one is the one that can bite: with both on the classpath you get Cache2k, not Caffeine. Nothing logs the decision at INFO. Set spring.cache.type explicitly.