zoukankan      html  css  js  c++  java
  • SpringBoot 集成ehcache

    1, 项目实在springboot 集成mybatis 的基础上的:

     https://www.cnblogs.com/pickKnow/p/11189729.html

    2,pom 如下,有的不需要加,只需要加下ehcache 相关就行

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.0.RELEASE</version>
        </parent>
        <dependencies>
            <!-- SpringBoot 对lombok 支持 -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <!-- SpringBoot web 核心组件 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </dependency>
            <!-- SpringBoot 外部tomcat支持 -->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
            <!-- springboot-log4j -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-log4j</artifactId>
                <version>1.3.8.RELEASE</version>
            </dependency>
            <!-- springboot-aop 技术 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <!--开启 cache 缓存 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
            <!-- ehcache缓存 -->
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
                <version>2.9.1</version><!--$NO-MVN-MAN-VER$ -->
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!-- mysql 依赖 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
      

     3,需要缓存的方法上加上注解

    @Cacheable

    在类上给缓存加上名字
    @CacheConfig(cacheNames = "userCache")
    package com.aiyuesheng.mapper;
    
    import org.springframework.cache.annotation.CacheConfig;
    import org.springframework.cache.annotation.Cacheable;
    
    import com.aiyuesheng.entity.User;
    
    @CacheConfig(cacheNames = "userCache")
    public interface UserMapperdb {
    
        void insertUser(User user);
    
        @Cacheable
        User selectUserById(int id);
    
    }

    4,启动类上加上读取缓存

    @EnableCaching
    @MapperScan("com.aiyuesheng.mapper")
    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    5,设置了缓存的名字userCache,那么这个缓存的参数在哪里?

      在配置文件:ehcache.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
        <!-- 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->
        <diskStore path="java.io.tmpdir" />
    
        <!-- userCache缓存 -->
        <cache name="userCache" maxElementsInMemory="1000" eternal="false"
            timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
            diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
            diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        </cache>
    </ehcache>

    6,在application.yml 定义去读取这个文件

    #单数据源
    spring:
       datasource:
         url: jdbc:mysql://127.0.0.1:3306/testdb
         username: root
         password: 123456
         driver-class-name: com.mysql.jdbc.Driver
         
    mybatis:
      mapper-locations: classpath:com/aiyuesheng/mapping/*Mapper.xml
      type-aliases-package: com.aiyuesheng.entity
      
    # 缓存配置读取
    cache:
      type: ehcache
      ehcache: 
         config: classpath:ehcache.xml

    7,配置OK ,缓存里面有数据,他就会读取缓存里面的值。

    8,配置信息解读

       
     <diskStore path="java.io.tmpdir" />  指定数据(.data and .index)存储位置,可指定磁盘中的文件夹位置期
     <cache name="userCache"  Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。
        maxElementsInMemory="1000"  在内存中缓存的element的最大数目
        eternal="false"  设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。
    timeToIdleSeconds="120" timeToLiveSeconds="120"

    overflowToDisk
    ="true" 如果内存中数据超过内存限制,是否要缓存到磁盘上。
    diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
    diskPersistent
    ="false" 否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。

    diskExpiryThreadIntervalSeconds
    ="120" 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。
    memoryStoreEvictionPolicy
    ="LRU"> 缓存策略。默认值LRU,可选FIFO、LFU。
  • 相关阅读:
    257. Binary Tree Paths
    324. Wiggle Sort II
    315. Count of Smaller Numbers After Self
    350. Intersection of Two Arrays II
    295. Find Median from Data Stream
    289. Game of Life
    287. Find the Duplicate Number
    279. Perfect Squares
    384. Shuffle an Array
    E
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11290732.html
Copyright © 2011-2022 走看看