1坷澡、依賴
...
implementation('org.springframework.boot:spring-boot-starter-cache')
implementation('org.ehcache:ehcache')
....
2譬胎、配置
2.1 ehcache配置
在resources 目錄中創(chuàng)建ehcache.xml配置ehcache带迟。
這里需要注意的是磕蛇,百度里面的文章大部分都是告訴大家怎么配置ehcache2.x,但是ehcache的2.x和3.x完全就兩碼事情了景描,所以如果不經(jīng)過思考,一通 copy 那栽跟頭是肯定得了秀撇。
下面我貼出我項目中使用的配置:
<?xml version="1.0" encoding="UTF-8"?>
<eh:config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:eh='http://www.ehcache.org/v3'
xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.3.xsd">
<!--指定緩存目錄-->
<eh:persistence directory="${java.io.tmpdir}/cfa-cache-data"/>
<!--緩存模板-->
<eh:cache-template name="default">
<eh:expiry>
<eh:ttl unit="seconds">600</eh:ttl>
</eh:expiry>
<eh:resources>
<!--堆內(nèi)內(nèi)存可以放2000個條目超棺,超出部分堆外100MB-->
<eh:heap unit="entries">2000</eh:heap>
<eh:offheap unit="MB">100</eh:offheap>
</eh:resources>
</eh:cache-template>
<!--實際的緩存區(qū)間,繼承了default緩存模板,cfa 完全使用模板默認-->
<eh:cache alias="cfa" uses-template="default">
</eh:cache>
<!--下面兩個繼承了default緩存模板呵燕,但覆蓋了緩存的過期時間-->
<eh:cache alias="authority" uses-template="default">
<eh:expiry>
<eh:ttl unit="hours">1</eh:ttl>
</eh:expiry>
</eh:cache>
<eh:cache alias="lapp_service" uses-template="default">
<eh:expiry>
<eh:ttl unit="hours">24</eh:ttl>
</eh:expiry>
</eh:cache>
</eh:config>
2.1 SpringBoot配置
2.1.1 application.yml配置
這里需要注意了棠绘,在老版本Boot或者使用 ehcache2.x版本,在這里的配置是有差異的再扭。
老版本:
spring:
cache:
ehcache:
config: classpath:/ehcache.xml
新版本:
spring:
cache:
jcache:
config: classpath:/ehcache.xml
從上面新老配置可以看出氧苍,不一樣的地方是,老版本使用ehcache新版本中改為了jcache泛范,其他的不變让虐。
2.1.1 啟用注解
//在Boot 項目的啟動類上標注@EnableCaching來開啟緩存功能
@SpringBootApplication
@EnableCaching
public class LappApplication {
public static void main(String[] args) {
SpringApplication.run(LappApplication.class, args);
}
}
3、應(yīng)用緩存
在需要使用緩存的方法或類上增加@Cacheable注解
例如:
@Override
@Cacheable(cacheNames = "authority", key = "'authority_'+#uid")
public UserPojo getUserById(Long uid) throws UsernameNotFoundException {
User user = userDao.findById(uid).get();
if (user == null) {
throw new UsernameNotFoundException(uid + "");
}
return user.toPojo();
}
此處的cacheNames的值authority需要和ehcache.xml中 cache 的alias名稱對應(yīng)罢荡,否則訪問是會拋找不到緩存空間的異常赡突。
關(guān)于更多Spring緩存注解@Cacheable对扶、@CacheEvict、@CachePut的使用麸俘,讀者可以自行百度辩稽,這里就不過多描述了。