java快取1
阿新 • • 發佈:2018-12-18
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);
}