我是“ spring boot”的新手(请多多包涵),在配置缓存以使用JSR107时遇到了一些问题。
我将“ spring boot”用引号引起来,因为我不相信我实际上是在以spring boot的方式这样做的。
当部署到tomcat时,我正在使用WebApplicationInitializer来启动应用程序。
public class WebAppInitializer implements WebApplicationInitializer
{
@Override
public void onStartup(ServletContext context)
{
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
webApplicationContext.register(AppConfig.class);
webApplicationContext.register(CacheConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = context.addServlet("dispatcher",
new DispatcherServlet(webApplicationContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
该类注册AppConfig和CacheConfig,如下所示:
@Configuration
@EnableWebMvc
@PropertySources({ @PropertySource("classpath:application.properties"),
@PropertySource(value = "classpath:configurable-application.properties", ignoreResourceNotFound = true) })
public class AppConfig implements WebMvcConfigurer
{
... a few bean definitions here, not relevant to this issue
}
@Configuration
public class CacheConfig
{
public CacheConfig()
{
CachingProvider provider = Caching.getCachingProvider();
System.out.println("STARTUP: CachingProvider " + provider.getClass());
CacheManager cacheManager = provider.getCacheManager();
System.out.println("STARTUP: CacheManager " + cacheManager.getClass());
System.out.println("STARTUP: CacheManager URI " + cacheManager.getURI());
Iterable<String> caches = cacheManager.getCacheNames();
for (String cacheName : caches)
{
System.out.println("STARTUP: CACHE " + cacheName);
}
}
}
如您所见,我在其中进行了一些调试,确实看起来是在创建正确的CacheManager和Provider,但没有缓存。
STARTUP: CachingProvider class org.ehcache.jsr107.EhcacheCachingProvider
STARTUP: CacheManager class org.ehcache.jsr107.Eh107CacheManager
STARTUP: CacheManager URI urn:X-ehcache:jsr107-default-config
我认为它是通过查看类路径上可用的jar来完成的。
在application.properties中有以下内容
spring.cache.jcache.config=classpath:ehcache.xml
确实ehcache.xml存在于类路径中,但我认为它从未被读取过,因为我无法从上面显示的缓存名称循环调试中获得任何调试信息。
我尝试将@EnableCaching标记粘贴在CacheConfig类上,但是随后出现以下错误
No CacheResolver specified, and no bean of type CacheManager found.
但是,调试与上面的调试完全相同,表明我具有CachingProvider和CacheManager。
任何帮助将不胜感激。您可能会说,尝试避免使用Spring Boot的魔力,并希望更加明确地说明配置。