public interface Cache {
/**
* Refresh the cache. If succeed, return true, else return false;
*
* @return
*/
boolean refresh();
/**
* How much time it will refresh the cache.
*
* @return
*/
long interval();
}
@Controller
public class CacheManagerController {
@Autowired
private CacheController cache;
private static ScheduledExecutorService executor = Executors
.newScheduledThreadPool(1);
public CacheManagerController() {
executor.scheduleAtFixedRate(() -> cache.refresh(), 0, cache.interval(),
TimeUnit.MILLISECONDS);
}
}
public class CacheService {
public static final long ONE_MINUTE = 60 * 1000;
private static ScheduledExecutorService executor = Executors
.newScheduledThreadPool(1);
public static void register(Cache cache) {
executor.scheduleAtFixedRate(() -> cache.refresh(), 0, cache.interval(),
TimeUnit.MILLISECONDS);
}
}
@Controller
public class CacheController implements Cache {
// autowire 各种不同的service,或者是repo连接数据库
@Autowired
private Service service;
public CacheController() {
CacheService.register(this);
}
// cache interface
@Override
public long interval() {
return 1000;
}
@Override
public boolean refresh() {
return true;
}
}
public class PreloadListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
CacheFactory.init();
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
// web.xml
<listener>
<listener-class>com.sapphire.listener.PreloadListener</listener-class>
</listener>
public class CacheFactory {
private static ConcurrentHashMap<String, Cache> caches = new ConcurrentHashMap<>();
private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
private static void register(Cache cache) {
caches.put(cache.category(), cache);
}
private static void registerAll() {
register(new StockCache());
}
public static void init() {
registerAll();
for (Cache cache : caches.values()) {
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
cache.refresh();
}
}, 0, cache.interval(), TimeUnit.MILLISECONDS);
}
}
public static Cache getCache(String key) {
if (caches.contains(key)) {
return caches.get(key);
}
return null;
}
}
// cache接口除了需要提供interval和refresh以外,还需要提供一个category来区分不同的Cache
public interface Cache {
/**
* Refresh the cache. If succeed, return true, else return false;
*
* @return
*/
boolean refresh();
/**
* How much time it will refresh the cache.
*
* @return
*/
long interval();
/**
* Cache's category. Each cache has distinct category.
*
* @return
*/
String category();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有