如何在Spring应用程序中配置JCache

时间:2019-04-02 13:57:44

标签: java spring spring-boot

我是“ 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的魔力,并希望更加明确地说明配置。

0 个答案:

没有答案