⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractcache.java

📁 管理公司合同
💻 JAVA
字号:
/*
 * Created on 2006-8-26 13:16:28
 *
 * By SinoBest
 * Copyright hnisi.com.cn, 2005-2006, All rights reserved.
 */

package cn.com.juneng.system.common.cache;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.com.juneng.system.common.COMMON;
import cn.com.juneng.system.common.util.SimpleDAO;

/**
 * @author yehailong
 * 
 */

public abstract class AbstractCache {
	protected abstract String getTableName();

	protected abstract List loadDBData() throws Exception;

	protected abstract void synchronzeCacheData() throws Exception;

	protected abstract List loadCacheData();

	/**
	 * 同步检查时间 (单位:秒)
	 * 
	 * @return
	 */
	protected abstract int getCheckTime();

	private static Map synchronizeTime = new HashMap();

	protected synchronized List getCacheData() throws Exception {
		long curTime = System.currentTimeMillis();
		boolean startSync = false;
		if (synchronizeTime.get(getTableName()) == null) {
			startSync = true;
		} else {
			// 上次同步时间
			long synTime = ((Long) synchronizeTime.get(getTableName()))
					.longValue();
			int checkTime = getCheckTime();
			if (checkTime == 0) {
				checkTime = 30;
			}
			if (curTime - synTime > getCheckTime() * 1000) {
				// 30秒检查一次TABLE_MONITOR
				startSync = true;
			}
		}
		if (!startSync) {
			synchronzeCacheData();
			return loadCacheData();
		} else {
			// 检查DATA_CHANGE
			synchronizeTime.put(getTableName(), new Long(curTime));

			String sql = "select DATA_CHANGE from TABLE_MONITOR where TABLE_NAME='"
					+ getTableName() + "'";
			List dataList = SimpleDAO.query(sql);
			if (COMMON.isEmpty(dataList)) {
				throw new CacheNotDefineException("TABLE_MONITOR表中未定义'"
						+ getTableName() + "'");
			}
			Map map = (Map) dataList.get(0);
			String dataChange = (String) map.get("DATA_CHANGE");
			if ("0".equals(dataChange)) {
				// 数据未变化,直接返回缓存
				if (loadCacheData() == null) {
					synchronzeCacheData();
				}
				return loadCacheData();
			} else if ("1".equals(dataChange)) {
				// 同步缓存
				synchronzeCacheData();
				// 更新标志
				sql = "update TABLE_MONITOR set DATA_CHANGE='0' where TABLE_NAME='"
						+ getTableName() + "'";
				SimpleDAO.execute(sql);

				return loadCacheData();
			}
			return null;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -