工程启动的时候去数据库查询配置,然后将配置数据存到本地缓存
优点:后续就不用去数据库查询。
缺点:修改配置表要重启进程。
数据库层忽略
服务层:工程启动时将数据库表数据存进缓存对象
import com.c26.project.payWX.common.ContextCache;
import com.c26.project.payWX.dao.PayBizWxDao;
import com.c26.project.payWX.entity.PayBizWx;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.List;
@SuppressWarnings("unchecked")
@Service
public class PayBizService {
@Autowired
PayBizWxDao payBizWxDao;
/***
* 工程启动执行
* 查询数据库,将集合存进本地缓存
*/
@PostConstruct
public void cachePayBiz() {
List<PayBizWx> payBizWxList = payBizWxDao.getPayBizWxList();
if (!CollectionUtils.isEmpty(payBizWxList)) {
for (PayBizWx payBizWx : payBizWxList) {
ContextCache.insertWxPayBiz(new PayBizWx(payBizWx.getAppId(), payBizWx.getAppKey(), payBizWx.getMchId(), payBizWx.getSandbox()));
}
}
}
}
本地缓存文件:将数据根据appId为key存进缓存
import com.c26.project.payWX.entity.PayBizWx;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
public class ContextCache {
private static Map<String, PayBizWx> payBizWxList = new HashMap<>();
/***
* 根据appId 获取配置参数
* @param appId 应用ID
*/
public static PayBizWx getWxPayBiz(String appId) {
return payBizWxList.get(appId);
}
/***
* 将配置数据以appId
*/
public static void insertWxPayBiz(PayBizWx payBizWx) {
if (null != payBizWx && !StringUtils.isEmpty(payBizWx.getAppId()) && !StringUtils.isEmpty(payBizWx.getAppKey()) && !StringUtils.isEmpty(payBizWx.getMchId())) {
if (!payBizWxList.containsKey(payBizWx.getAppId())) {
payBizWxList.put(payBizWx.getAppId(), payBizWx);
}
}
}
}
使用方式:
PayBizWx payBizWx = ContextCache.getWxPayBiz(appId);