Spring-Boot (四) cache/ehcache/redis-cache集成使用

Spring-Boot集成Cache。官文:当当当当


缓存集成引入:

spring cache

application.properties中的配置:spring-boot-starter-cache,在无其他第三方缓存实现依赖被引入情况下,默认使用spring cache,采用concurrentMap实现的缓存,在SpringBootApplication入口类上添加@EnableCaching注解即可在service方法内使用spring缓存注解,生产环境中不推荐采用此形式。


starter引入后,默认自动检测是否存在redis、ehcache等第三方实现(即是否引入依赖),如果存在,则自动配置cacheManager,并启用第三方缓存实现,在代码中如无需个性化配置情况下,则只需要在SpringBootApplication入口类上添加@EnableCaching注解即可。service曾缓存的使用,就是spring得缓存注解如:@Cacheable,@Evict, @Caching...


实际使用过程中往往需要自定义配置,如自定义缓存时间,缓存名称等等。


ehcache缓存集成及使用(引入spring-boot-starter-cache和ehcache)

application.proerties配置如下

#指定使用的缓存类型,参照CacheType类,禁用取none
spring.cache.type=ehcache
#指定缓存配置文件位置
spring.cache.ehcache.config=classpath:cache/ehcache-local.xml

然后再SpringBootApplication入口类添加注解@EnableCaching

package com.tom;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableCaching 
@SpringBootApplication ///@SpringBootApplication 注解代替了 @Configuration, @EnableAutoConfiguration, and @ComponentScan
public class MySpringBootApplication {

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

在Service层使用注解:

package com.tom.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.tom.bean.Employee;
import com.tom.dao.IEmployeeDao;
import com.tom.service.IEmployeeService;

@Service
public class EmployeeServiceImpl implements IEmployeeService {

	@Autowired
	private IEmployeeDao dao;
	
	@Cacheable(value="userCache", key="'employee_'+#id")
	@Override
	@Transactional(readOnly=true)
	public Employee findOne(int id) {
		return this.dao.get(id);
	}

}
 

controller层调用时即会自动使用ehcache缓存注解。


redis缓存使用(引入spring-boot-starter-data-redis)

application.proerties配置如下

#指定使用的缓存类型,参照CacheType类,禁用取none
spring.cache.type=redis
#指定缓存配置文件位置
spring.cache.cache-names=userCache,sysCache
#缓存有效时间,单位毫秒
spring.cache.redis.time-to-live=600000
其他地方不需要做任何修改,只需要将配置文件中的缓存配置替换即可,springboot将会使用redis缓存。代码中缓存使用的地方不需要做任何改变。


CacheManager的其他设置

Spring-Boot提供了在cacheManager未完全初始化前的一些设置操作,只需要implements CacheManagerCustomizer,可以在实现customize方法中对cacheManager进行设置,对于customizer的类定义和注入到bean,可以定义多个,数量无限制,启用哪个缓存就会调用哪个缓存的个性化配置。

例如:

package com.tom.cache;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.DefaultRedisCachePrefix;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCachePrefix;

/**CacheManagerCustomizer可以在cacheManager未完全初始化前做一些配置操作
* 可以定义多个。
* 使用时,在application.properties内定义启用哪个作为cache即可。使用哪个cache将会初始化那个cacheManager * @author tomZ * @date 2017年11月13日 * @desc TODO */ @Configuration @EnableCaching public class CacheManagerCustomizerInitializer { private static Logger logger = LoggerFactory.getLogger(CacheManagerCustomizerInitializer.class); @Bean public CacheManagerCustomizer ehcacheManagerCustomizer() { return new CacheManagerCustomizer() { @Override public void customize(EhCacheCacheManager cacheManager) { //自定义设置 logger.info("ehcache cacheManager customizer."); } }; } @Bean public CacheManagerCustomizer redisManagerCustomizer() { return new CacheManagerCustomizer() { @Override public void customize(RedisCacheManager cacheManager) { logger.info("redis cacheManager customizer."); //自定义设置 //启用前缀 cacheManager.setUsePrefix(true); //设置前缀为 RedisCachePrefix cachePrefix = new DefaultRedisCachePrefix("u_"); cacheManager.setCachePrefix(cachePrefix ); } }; } }

上面就是对cacheManager进行一些初始化配置操作

如果自定义了customizer类,@EnableCaching,则在SpringBootAppcliation的入口类上就不需要添加该注解了。@EnableCaching注解相当于原SpringMVC配置中的标签。





你可能感兴趣的:(Spring)