当前位置: 首页 > 知识库问答 >
问题:

通过Spring/MyBatis了解EhCache

轩辕天佑
2023-03-14

我正在将EhCache与Spring和MyBatis一起使用,需要澄清EhCache是如何工作的。我有以下ehcache的配置文件。

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false"
         monitoring="autodetect"
         dynamicConfig="true">

    <diskStore path="java.io.tmpdir" />

    <defaultCache maxElementsInMemory="10000"
                  eternal="false"
                  timeToIdleSeconds="300"
                  timeToLiveSeconds="600"
                  diskSpoolBufferSizeMB="30"
                  maxElementsOnDisk="10000"
                  diskExpiryThreadIntervalSeconds="120"
                  memoryStoreEvictionPolicy="LRU" statistics="false">
    </defaultCache>
</ehcache>

我只是在配置默认缓存。如果我理解正确,当你将这一行添加到MyBatis mapper文件时,它会创建一个新的缓存。

<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

这让我想知道它是否从默认缓存继承了属性?如果不是,配置默认缓存的目的是什么?

最佳做法是为每一项功能/数据创建一个缓存,还是一个大缓存?

我还试图摆脱XML,所以我想知道这一切是否都可以通过Java配置来实现?

我有下面的Java配置,但似乎没有一种方法可以用Java配置方法配置默认缓存,所以我想知道这会有多好,以及它是否是使用MyBatis的一个好选项?

@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Autowired
    Environment environment;

    @Bean(destroyMethod = "shutdown")
    public net.sf.ehcache.CacheManager ehCacheManager() {
        CacheConfiguration cacheConfiguration = new CacheConfiguration();
        cacheConfiguration.setName(environment.getRequiredProperty("ehcache.name"));
        cacheConfiguration.setMemoryStoreEvictionPolicy(environment.getRequiredProperty("ehcache.memoryStoreEvictionPolicy"));
        cacheConfiguration.setDiskExpiryThreadIntervalSeconds(environment.getRequiredProperty("ehcache.diskExpiryThreadIntervalSeconds", Integer.class));
        cacheConfiguration.setDiskSpoolBufferSizeMB(50);
        cacheConfiguration.setOverflowToDisk(true);
        cacheConfiguration.setDiskPersistent(true);
        cacheConfiguration.setMaxBytesLocalHeap("512000000");
        cacheConfiguration.setMaxBytesLocalDisk("2048000000");
        cacheConfiguration.eternal(false);
        cacheConfiguration.setTimeToIdleSeconds(1800);
        cacheConfiguration.setTimeToLiveSeconds(3600);
        cacheConfiguration.statistics(true);
        cacheConfiguration.logging(true);

        net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
        config.addCache(cacheConfiguration);

        return net.sf.ehcache.CacheManager.newInstance(config);
    }

    @Bean
    @Override
    public org.springframework.cache.CacheManager cacheManager() {
        return new EhCacheCacheManager(ehCacheManager());
    }

    @Override
    public CacheResolver cacheResolver() {
        return new SimpleCacheResolver();
    }

    @Override
    public KeyGenerator keyGenerator() {
        return new SimpleKeyGenerator();
    }

    @Override
    public CacheErrorHandler errorHandler() {
        return new SimpleCacheErrorHandler();
    }
}

共有1个答案

太叔昊苍
2023-03-14

如果你看一下org的源代码。迈巴蒂斯。储藏室。ehcache。你会发现的

>

最好的选择是使用Spring方法级缓存,并停止使用org.mybatis.caches.ehcache.EhcacheCache缓存的想法

更好地使用spring注释驱动的缓存,这意味着您不必使用一个大的缓存,但可以为每种情况使用单独的缓存。

 类似资料:
  • 本文向大家介绍通过Spring Boot整合Mybatis分析自动配置详解,包括了通过Spring Boot整合Mybatis分析自动配置详解的使用技巧和注意事项,需要的朋友参考一下 前言 SpringBoot凭借"约定大于配置"的理念,已经成为最流行的web开发框架,所以有必须对其进行深入的了解;本文通过整合Mybatis类来分析SpringBoot提供的自动配置(AutoConfigure)功

  • 本文向大家介绍通过实例了解java TransferQueue,包括了通过实例了解java TransferQueue的使用技巧和注意事项,需要的朋友参考一下 序言 本文主要简介一下TransferQueue。 TransferQueue TransferQueue(java7引入)继承了BlockingQueue(BlockingQueue又继承了Queue)并扩展了一些新方法。生产者会一直阻塞

  • 本文向大家介绍MyBatis与Spring整合过程实例解析,包括了MyBatis与Spring整合过程实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了MyBatis与Spring整合过程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从之前的代码中可以看出直接使用 MyBatis 框架的 SqlSession 访问数据

  • 本文向大家介绍深入了解MyBatis参数,包括了深入了解MyBatis参数的使用技巧和注意事项,需要的朋友参考一下 深入了解MyBatis参数 相信很多人可能都遇到过下面这些异常: "Parameter 'xxx' not found. Available parameters are [...]" "Could not get property 'xxx' from xxxClass. Caus

  • MyBatis代码不加载枚举类型(版本:3.4.4)。 在MySQL数据库中,我有一个带有“cartype”字段的表,它是INT(11)类型。在Java中,我创建了一个用于处理汽车类型的枚举: Car mapper xml如下所示(不包含所有数据): 最后,我的豆子看起来如下: bean也包含getters和setters。 当我尝试在java中获取汽车时,它抛出以下异常:

  • 本文向大家介绍spring boot mybatis多数据源解决方案过程解析,包括了spring boot mybatis多数据源解决方案过程解析的使用技巧和注意事项,需要的朋友参考一下 在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源,觉得性能不