SpringBoot2.0 Ehcacheフレームワークの統合


MAVEN環境

		org.springframework.boot
		spring-boot-starter-parent
		2.0.0.RELEASE
	
	
		
		
			org.projectlombok
			lombok
		
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-starter-tomcat
		
		
		
			org.apache.tomcat.embed
			tomcat-embed-jasper
		
		
		
			org.springframework.boot
			spring-boot-starter-log4j
			1.3.8.RELEASE
		
		
		
			org.springframework.boot
			spring-boot-starter-aop
		
		
		
			commons-lang
			commons-lang
			2.6
		
		
		
			org.apache.httpcomponents
			httpclient
		
		
		
			com.alibaba
			fastjson
			1.2.47
		
		
			javax.servlet
			jstl
		
		
			taglibs
			standard
			1.1.2
		
		
		
			org.springframework.boot
			spring-boot-starter-cache
		
		
		
			net.sf.ehcache
			ehcache
			2.9.1
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.1.1
		
		
		
			mysql
			mysql-connector-java
		
	

YMLプロファイル情報

###     
server:
  port: 8081
###       
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    test-while-idle: true
    test-on-borrow: true
    validation-query: SELECT 1 FROM DUAL
    time-between-eviction-runs-millis: 300000
    min-evictable-idle-time-millis: 1800000
  #       
  cache:
    type: ehcache
    ehcache:
      config: classpath:app2_ehcache.xml

App起動方式


注記の追加:@EnableCaching ehcacheキャッシュモードをオンにする
@MapperScan(basePackages = { "com.itmayiedu.mapper" })
@EnableCaching
@SpringBootApplication
public class App {

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}

}

プロジェクトの使用


@Cacheable注記を追加したメソッドは、キャッシュ可能であることを示します.
@CacheConfigはキャッシュ構成の作成を示し、KeyはuserCache
@CacheConfig(cacheNames = "userCache")
public interface UserMapper {
	@Select("SELECT ID ,NAME,AGE FROM users where id=#{id}")
	@Cacheable
	List getUser(@Param("id") Long id);
}

EhCache構成


app1_ehcache.xml



	

	
	
	
	
	

	

	
	
	

	
	
		
		
		
	

app2_ehcache.xml



	

	
	
	

	

	

	
	
	

	
	
		
		
		
	

キャッシュのクリア

	@Autowired
	private CacheManager cacheManager; // EHCache      

	@RequestMapping("/remoKey")
	public void remoKey() {
		cacheManager.getCache("userCache").clear(); //        
	}

パラメータ関連構成


1.diskStore:データ(.data and.index)の格納場所を指定し、ディスク内のフォルダの位置期間The diskStore element is optionalを指定することができる.It must be configured if you have overflowToDisk or diskPersistent enabled    for any cache. If it is not configured, a warning will be issues and java.io.tmpdir will be used.
 
2、defaultCache:デフォルトの管理ポリシー
 
EhcacheがMap集合を用いて実現したelementは実はkeyとvalueである.
一、以下の属性は必須です.
1、name:Cacheの名前は、唯一でなければなりません(ehcacheはこのcacheをHashMapに入れます).
2、maxElementsInMemory:メモリにキャッシュされたelementの最大数.
3、maxElementsOnDisk:ディスクにキャッシュされているelementの最大数.デフォルト値は0で、制限されていないことを示します.
4、eternal:キャッシュされたelementsがいつまでも期限切れにならないかを設定します.trueの場合、キャッシュされたデータは常に有効であり、falseの場合、timeToIdleSeconds、timeToLiveSecondsに基づいて判断されます.
5、overflowToDisk:メモリ内のデータがメモリ制限を超えた場合、ディスクにキャッシュするかどうか.
二、以下の属性はオプションです.
1、timeToIdleSeconds:オブジェクトの空き時間とは、オブジェクトがどのくらいアクセスされていないかで失効することを意味します.eternalがfalseである場合にのみ有効です.デフォルト値0は、常にアクセス可能であることを示します.
2、timeToLiveSeconds:オブジェクトの生存時間.オブジェクトの作成から失効までの時間を指す.eternalがfalseである場合にのみ有効です.デフォルト値0は、常にアクセス可能であることを示します.
3、diskPersistent:ディスク上で永続化するかどうか.jvmを再起動した後、データが有効かどうかを指します.デフォルトはfalseです.
4、diskExpiryThreadIntervalSeconds:オブジェクト検出スレッド実行間隔.オブジェクトのステータスを識別するスレッドは、どれくらいの時間に1回実行されますか.
5、diskSpoolBufferSizeMB:DiskStoreが使用するディスクサイズ、デフォルト値30 MB.各cacheは、それぞれのDiskStoreを使用します.
6.memoryStoreEveictionPolicy:メモリ内のデータがメモリ制限を超えた場合、ディスクにキャッシュする際のポリシー.デフォルト値LRU、オプションFIFO、LFU.