From ebbb519c075146da78c0681611eacab815088b9a Mon Sep 17 00:00:00 2001 From: lexluo09 <39718951+lexluo09@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:26:19 +0800 Subject: [PATCH] (improvement)(chat) Reduce the number of database queries when retrieving system configuration parameters. (#1466) --- .../service/impl/SystemConfigServiceImpl.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/tencent/supersonic/common/service/impl/SystemConfigServiceImpl.java b/common/src/main/java/com/tencent/supersonic/common/service/impl/SystemConfigServiceImpl.java index 3f3c97db7..9509cc734 100644 --- a/common/src/main/java/com/tencent/supersonic/common/service/impl/SystemConfigServiceImpl.java +++ b/common/src/main/java/com/tencent/supersonic/common/service/impl/SystemConfigServiceImpl.java @@ -3,17 +3,19 @@ package com.tencent.supersonic.common.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.mapper.SystemConfigMapper; 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.util.JsonUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; + import java.util.List; +import java.util.concurrent.atomic.AtomicReference; @Service public class SystemConfigServiceImpl @@ -22,8 +24,21 @@ public class SystemConfigServiceImpl @Autowired private Environment environment; + // Cache field to store the system configuration + private AtomicReference cachedSystemConfig = new AtomicReference<>(); + @Override public SystemConfig getSystemConfig() { + SystemConfig cachedConfig = cachedSystemConfig.get(); + if (cachedConfig != null) { + return cachedConfig; + } + SystemConfig systemConfigDb = getSystemConfigFromDB(); + cachedSystemConfig.set(systemConfigDb); + return systemConfigDb; + } + + private SystemConfig getSystemConfigFromDB() { List list = list(); if (CollectionUtils.isEmpty(list)) { SystemConfig systemConfig = new SystemConfig(); @@ -46,6 +61,7 @@ public class SystemConfigServiceImpl public void save(SystemConfig sysConfig) { SystemConfigDO systemConfigDO = convert(sysConfig); saveOrUpdate(systemConfigDO); + cachedSystemConfig.set(sysConfig); } private SystemConfig convert(SystemConfigDO systemConfigDO) {