cn.jiangzeyin.common.spring.init.SiteCache Maven / Gradle / Ivy
package cn.jiangzeyin.common.spring.init;
import cn.jiangzeyin.common.spring.ServiceInfoUtil;
import cn.jiangzeyin.database.base.ReadBase;
import cn.jiangzeyin.database.run.read.Select;
import cn.jiangzeyin.database.run.write.Update;
import cn.jiangzeyin.entity.defaults.SiteInfo;
import cn.jiangzeyin.system.SystemBean;
import cn.jiangzeyin.system.log.LogType;
import cn.jiangzeyin.system.log.SystemLog;
import cn.jiangzeyin.system.pool.DefaultExecutor;
import cn.jiangzeyin.util.system.interfaces.UtilSiteCacheInterface;
import cn.jiangzeyin.util.system.util.UtilSystemCache;
import cn.jiangzeyin.util.util.StringUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.Assert;
import java.net.UnknownHostException;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author jiangzeyin
* Created by jiangzeyin on 2017/2/3.
*/
@Configuration
public class SiteCache implements UtilSiteCacheInterface {
@Value("${site-cache:false}")
private boolean cache;
public static SiteInfo currentSite;
private static SiteCache beanSiteCache;
/**
* 站点缓存
*/
private final static ConcurrentHashMap siteMap = new ConcurrentHashMap<>();
private final static ConcurrentHashMap siteId = new ConcurrentHashMap<>();
//private final static SiteCache siteCache = new SiteCache();
/**
* 加载所有站点信息到程序缓存
*/
static void init() {
beanSiteCache = SpringUtil.getBean(SiteCache.class);
if (!beanSiteCache.cache)
return;
long s = System.currentTimeMillis();
SystemLog.LOG(LogType.DEFAULT).info("初始化站点信息");
siteMap.clear();
Select util_site = new Select() {
};
util_site.setWhere("isDelete=0");
List list = util_site.run();
if (list != null)
for (SiteInfo siteInfo : list) {
// 读取当前站点
if (siteInfo.getTag().equals(SystemBean.getInstance().getSystemTag())) {
currentSite = siteInfo;
}
siteId.put(siteInfo.getId(), siteInfo.getTag());
siteMap.put(siteInfo.getTag(), siteInfo);
}
if (currentSite == null) {
SystemLog.LOG(LogType.DEFAULT).info("没有找到本站点对应数据,请检查tag 是否正确");
} else {
initSiteRunIng();
// updateSiteToken();
}
UtilSystemCache.init(beanSiteCache);
// EntitySystemCache.init(siteCache);
SystemLog.LOG(LogType.DEFAULT).info("初始化系站点信息完成:" + (System.currentTimeMillis() - s));
}
@Override
public String getSiteUrl(String tag) {
return getSiteInfo(tag).getUrl();
}
@Override
public String getLocalPath(String tag) {
return getSiteInfo(tag).getLocalPath();
}
public void execute(Runnable command) {
DefaultExecutor.DEFAULT_EXECUTOR.execute(command);
}
@Override
public int getCurrentSiteId() {
if (currentSite == null)
return -1;
return currentSite.getId();
}
public String getElTag(String tag) {
return getSiteInfo(tag).getElTag();
}
public String parseSiteName(String siteIds) {
if ("0".equals(siteIds))
return "全部站点";
String[] ids = StringUtil.StringToArray(siteIds);
if (ids == null)
return null;
StringBuilder stringBuffer = new StringBuilder();
for (int i = 0; i < ids.length; i++) {
if (i != 0)
stringBuffer.append(",");
SiteInfo siteInfo = SiteCache.getSiteInfo(StringUtil.parseInt(ids[i]));
if (siteInfo == null)
continue;
stringBuffer.append(siteInfo.getName());
}
return stringBuffer.toString();
}
/**
* @param tag tag
* @return siteInfo
*/
public static SiteInfo getSiteInfo(String tag) {
if (beanSiteCache == null)
beanSiteCache = SpringUtil.getBean(SiteCache.class);
if (!beanSiteCache.cache)
throw new RuntimeException("please on siteCache");
SiteInfo siteInfo = siteMap.get(tag);
Assert.notNull(siteInfo, String.format("没有找到对应%s站点", tag));
return siteInfo;
}
/**
* @param id id
* @return siteInfo
*/
public static SiteInfo getSiteInfo(int id) {
String tag = siteId.get(id);
if (tag == null)
return null;
return getSiteInfo(tag);
}
/**
* 保存已经启动的程序地址
*/
private static void initSiteRunIng() {
try {
String serviceUrl = ServiceInfoUtil.getServiceUrl();
SystemLog.LOG().info("url:" + serviceUrl);
JSONArray jsonArray = currentSite.runIngToJSONArray();
if (jsonArray == null)
jsonArray = new JSONArray();
boolean find = false;
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject == null)
continue;
String url = jsonObject.getString("url");
if (serviceUrl.equals(url)) {
find = true;
jsonObject.put("startTime", System.currentTimeMillis());
jsonObject.put("status", true);
break;
}
}
if (!find) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", serviceUrl);
jsonObject.put("active", SystemBean.getInstance().getActive().toString());
jsonObject.put("startTime", System.currentTimeMillis());
jsonObject.put("status", true);
jsonArray.add(jsonObject);
}
Update update = new Update() {
};
update.setKeyColumn("tag");
update.putUpdate("api_token", SystemBean.getInstance().systemApiToken);
update.setKeyValue(currentSite.getTag());
update.putUpdate("run_ing", jsonArray.toString());
update.run();
} catch (UnknownHostException e) {
SystemLog.ERROR().error("获取站点url ", e);
}
}
// /**
// * 更新站点api token
// */
// private static void updateSiteToken() {
// Update update = new Update() {
// };
// update.setKeyColumn("tag");
// update.setKeyValue(currentSite.getTag());
//
// update.run();
// }
/**
* @param objects obj
* @param tag tag
*/
public static void saveSiteRunIng(JSONObject objects, String tag) {
Assert.notNull(objects);
synchronized (SiteCache.class) {
Select select = new Select() {
};
select.setKeyColumn("tag");
select.setKeyValue(tag);
select.setColumns("run_ing");
select.setResultType(ReadBase.Result.String);
String result = select.run();
JSONArray jsonArray = JSONArray.parseArray(result);
String siteUrl = objects.getString("url");
if (siteUrl == null)
return;
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String url = jsonObject.getString("url");
if (siteUrl.equals(url)) {
jsonObject.put("msg", objects.getString("msg"));
jsonObject.put("refreshCaChe", objects.getLongValue("refreshCaChe"));
jsonObject.put("status", objects.getBooleanValue("status"));
Update update = new Update() {
};
update.setKeyColumn("tag");
update.setKeyValue(tag);
update.putUpdate("run_ing", jsonArray.toString());
update.syncRun();
break;
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy