我使用Web和缓存依赖项创建Spring Boot 2.0 Starter项目:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
然后我更新了Spring bootstrap类来测试REST服务缓存:
@SpringBootApplication
@EnableCaching
@RestController
@RequestMapping
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping
@Cacheable("hello")
public String hello() {
return "1";
}
}
并在application.properties中指定了简单的缓存提供程序:
spring.cache.type=simple
一切都按预期工作。然后我添加了Caffeine依赖项并更改了缓存类型:
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
spring.cache.type=caffeine
该应用程序无法启动异常后:
引起:java.lang.IllegalArgumentException:没有自动配置缓存管理器,请检查您的配置(缓存类型为'CAFFEINE') 在org.springframework.util.Assert.notNull(Assert.java:193)〜[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration $ CacheManagerValidator.checkHasCacheManager(CacheAutoConfiguration.java:151)~ [spring-boot-autoconfigure-2.0.0.RELEASE.jar:2.0.0.RELEASE]
我试图在application.properties中提供缓存名称,但它没有帮助。
spring.cache.cache-names=hello
请告知。
答案 0 :(得分:1)
添加以下依赖项:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
答案 1 :(得分:0)
我也遇到了同样的情况,并且我还安装了Redis。 spring.cache.type=caffeine
和spring.cache.caffeine.spec
一样无效。似乎它尝试使用Redis缓存提供程序,该提供程序优先于Caffeine,除非您明确禁用Redis自动配置。否则,您必须手动配置Caffeine,例如:
@Configuration
public class CaffeineCacheConfiguration {
@Bean
public CacheManager cacheManager() {
CaffeineCache helloCache = new CaffeineCache("hello",
Caffeine.newBuilder().expireAfterAccess(60, TimeUnit.SECONDS).build());
SimpleCacheManager manager = new SimpleCacheManager();
manager.setCaches(Collections.singletonList(helloCache));
return manager;
}
}