controller:
package com.eyee.api.activity.controller;
import com.eyee.api.activity.Cache.TestCache;
import com.eyee.common.http.ResponseBase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequestMapping("/test")
@RestController
public class TestController {
@Autowired
TestCache testCache;
@RequestMapping("test")
public ResponseBase Test(@RequestParam("key") Integer key){
List<String> data = testCache.test(key);
return ResponseBase.succeeded().setData(data);
}
}
cache:
package com.eyee.api.activity.Cache;
import com.eyee.api.activity.service.TestService;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Service
public class TestCache {
private final static Logger logger = LoggerFactory.getLogger(CouponInfoCache.class);
static LoadingCache<Integer, List<String>> cache;
@Autowired
TestService service;
//创建缓存
public TestCache() {
System.out.println("init====");
cache= CacheBuilder.newBuilder()
// 设置缓存初始个数
.initialCapacity(1)
// 设置缓存定时刷新
.refreshAfterWrite(30, TimeUnit.MINUTES)
// 设置缓存一定时间没有被访问回收
.expireAfterAccess(20,TimeUnit.MINUTES)
// 设置缓存个数
.maximumSize(2)
.build(new CacheLoader<Integer, List<String>>() {
@Override
public List load(Integer key) {
logger.info("刷新缓存key"+key);
return (List<String>) service.getdata(key).getData();
}
});
}
//获取缓存
public List<String> test(Integer key){
List<String> list=null;
try {
list = cache.get(key);
}catch (Exception e){
logger.info("清除缓存");
cache.invalidate(key);
}
return list;
}
//清除缓存
public void invalidateAll(){
logger.info("begin invalidateAll------------");
cache.invalidateAll();
logger.info("end invalidateAll------------");
}
}
service:
package com.eyee.api.activity.service;
import com.eyee.common.http.ResponseBase;
public interface TestService {
public ResponseBase getdata(Integer aa);
}
ServiceImpl
package com.eyee.api.activity.impl;
import com.eyee.api.activity.repository.mysql.ActivityCouponRepository;
import com.eyee.api.activity.service.TestService;
import com.eyee.common.http.ResponseBase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestServiceImpl implements TestService {
@Autowired
ActivityCouponRepository activityCouponRepository;
@Override
public ResponseBase getdata(Integer aa) {
List<String> strings = activityCouponRepository.couponIds(aa);
if(strings==null){
return ResponseBase.succeeded().setData(null);
}
return ResponseBase.succeeded().setData(strings);
}
}
Respository:
@Repository
public interface ActivityCouponRepository extends JpaRepository<ActivityCoupon,Integer> {
@Query(value = "select couponid from coupon where activitytype =:activitytype",nativeQuery = true)
List<String> couponIds(@Param("activitytype")Integer activitytype);
}
结果:
![](https://img-blog.csdnimg.cn/20181217211612956.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hnbGZz,size_16,color_FFFFFF,t_70)