大佬教程收集整理的这篇文章主要介绍了如何在Spring Java配置中创建Jcache?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用spring cache abstraction设置jcache时遇到问题.
@Configuration
@EnableCaching
public class Cacheconfig {
@Bean(name = "caffeineCachingProvider")
public CachingProvider caffeineCachingProvider() {
return new caffeineCachingProvider();
}
@Bean(name = "caffeineCacheManager")
public jcacheCacheManager getSpringCacheManager() {
CacheManager cacheManager = caffeineCachingProvider().getCacheManager();
caffeineConfiguration<> caffeineConfiguration = new caffeineConfiguration<>();>>();>caffeineConfiguration.setExpiryPolicyFactory(FactoryBuilder.factoryOf(new AccessedExpiryPolicy(new Duration(TimeUnit.minutES,60))));
Cache<> caffeineConfiguration);
jcacheCacheManager jcacheCacheManager = new jcacheCacheManager(cacheManager);
return jcacheCacheManager;
}
}
我使用Caffein作为jcache.我只是无法理解我做错了什么.你能解释一下如何正确地做到这一点吗?
我得到的是NPE at line cacheManager.createCache(…)
org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'caffeineCacheManager' defined in com.myapp.spring.config.Cacheconfig: Bean instantiation via factory method Failed; nested exception is org.springframework.beans.beanInstantiationException: Failed to instantiate [org.springframework.cache.jcache.jcacheCacheManager]: Factory method 'getSpringCacheManager' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactorymethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateUsingFactorymethod(AbstractAutowireCapablebeanfactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:482)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getObject(Abstractbeanfactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:302)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:197)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.preInstantiateSingletons(DefaultListablebeanfactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.servlet.FrameworkServlet.configureAndrefreshWebApplicationContext(FrameworkServlet.java:668)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
at org.springframework.web.servlet.httpServletBean.init(httpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5266)
at org.apache.catalina.core.StandardContext.starTinternal(StandardContext.java:5554)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:677)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1912)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.beanInstantiationException: Failed to instantiate [org.springframework.cache.jcache.jcacheCacheManager]: Factory method 'getSpringCacheManager' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactorymethod(ConstructorResolver.java:588)
... 34 more
Caused by: java.lang.NullPointerException
at com.github.benmanes.caffeine.jcache.CacheProxy. caffeine.jcache.CacheFactory$Builder.newCacheProxy(CacheFactory.java:160)
at com.github.benmanes.caffeine.jcache.CacheFactory$Builder.build(CacheFactory.java:145)
at com.github.benmanes.caffeine.jcache.CacheFactory.createCache(CacheFactory.java:82)
at com.github.benmanes.caffeine.jcache.CacheManagerImpl.lambda$createCache$0(CacheManagerImpl.java:98)
at com.github.benmanes.caffeine.jcache.CacheManagerImpl$$Lambda$23/388708304.apply(UnkNown sourcE)
at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1853)
at com.github.benmanes.caffeine.jcache.CacheManagerImpl.createCache(CacheManagerImpl.java:94)
at com.myapp.spring.config.Cacheconfig.getSpringCacheManager(Cacheconfig.java:55)
at com.myapp.spring.config.Cacheconfig$$EnhancerBySpringcglib$$4f46e611.cglib$getSpringCacheManager$1( fig.Cacheconfig$$EnhancerBySpringcglib$$4f46e611$$FastClassBySpringcglib$$b70e5f67.invoke( cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.Annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:355)
at com.myapp.spring.config.Cacheconfig$$EnhancerBySpringcglib$$4f46e611.getSpringCacheManager(
当缓存设置为复制实例时,您应该选择足够的复制器来处理它.所以你可以写:
caffeineConfiguration.setCopierFactory(JavaserializationCopier::new);
要么
caffeineConfiguration.setCopierFactory(Copier::identity);
这取决于您是否希望在缓存键/值突变的情况下是安全的.
尽管如此,建议的选项是使用default settings禁用store-by-value选项并且需要复印机:
Config config = ConfigFactory.load();
caffeineConfiguration<> caffeineConfiguration = TypesafeConfigurator.defaults(config);
caffeineConfiguration.setExpiryPolicyFactory(factoryOf(new AccessedExpiryPolicy(new Duration(
TimeUnit.minutES,60))));
或者,您可以通过以下方式禁用按值设置:
caffeineConfiguration.setStoreByValue(false);
以上是大佬教程为你收集整理的如何在Spring Java配置中创建Jcache?全部内容,希望文章能够帮你解决如何在Spring Java配置中创建Jcache?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。