(improvement)(chat) Reduce the number of database queries when retrieving system configuration parameters. (#1466)

This commit is contained in:
lexluo09
2024-07-26 18:26:19 +08:00
committed by GitHub
parent 8f620480c6
commit ebbb519c07

View File

@@ -3,17 +3,19 @@ package com.tencent.supersonic.common.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.supersonic.common.config.SystemConfig;
import com.tencent.supersonic.common.persistence.dataobject.SystemConfigDO; import com.tencent.supersonic.common.persistence.dataobject.SystemConfigDO;
import com.tencent.supersonic.common.persistence.mapper.SystemConfigMapper; import com.tencent.supersonic.common.persistence.mapper.SystemConfigMapper;
import com.tencent.supersonic.common.pojo.Parameter; import com.tencent.supersonic.common.pojo.Parameter;
import com.tencent.supersonic.common.config.SystemConfig;
import com.tencent.supersonic.common.service.SystemConfigService; import com.tencent.supersonic.common.service.SystemConfigService;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@Service @Service
public class SystemConfigServiceImpl public class SystemConfigServiceImpl
@@ -22,8 +24,21 @@ public class SystemConfigServiceImpl
@Autowired @Autowired
private Environment environment; private Environment environment;
// Cache field to store the system configuration
private AtomicReference<SystemConfig> cachedSystemConfig = new AtomicReference<>();
@Override @Override
public SystemConfig getSystemConfig() { public SystemConfig getSystemConfig() {
SystemConfig cachedConfig = cachedSystemConfig.get();
if (cachedConfig != null) {
return cachedConfig;
}
SystemConfig systemConfigDb = getSystemConfigFromDB();
cachedSystemConfig.set(systemConfigDb);
return systemConfigDb;
}
private SystemConfig getSystemConfigFromDB() {
List<SystemConfigDO> list = list(); List<SystemConfigDO> list = list();
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
SystemConfig systemConfig = new SystemConfig(); SystemConfig systemConfig = new SystemConfig();
@@ -46,6 +61,7 @@ public class SystemConfigServiceImpl
public void save(SystemConfig sysConfig) { public void save(SystemConfig sysConfig) {
SystemConfigDO systemConfigDO = convert(sysConfig); SystemConfigDO systemConfigDO = convert(sysConfig);
saveOrUpdate(systemConfigDO); saveOrUpdate(systemConfigDO);
cachedSystemConfig.set(sysConfig);
} }
private SystemConfig convert(SystemConfigDO systemConfigDO) { private SystemConfig convert(SystemConfigDO systemConfigDO) {