SpringBoot項目啟動時就加載數(shù)據(jù)到內(nèi)存實現(xiàn)
更新時間:2026年04月12日 11:17:18 作者:一葉知寧Max
文章主要討論了在SpringBoot項目中,對于不經(jīng)常變動的配置型數(shù)據(jù),可以在項目啟動時直接加載到內(nèi)存中,以減少不必要的IO消耗,使用Maven管理后端依賴,并實現(xiàn)了服務(wù)層和控制器層
背景
對于一些配置型數(shù)據(jù)而言,改動不是很頻繁,可以在項目啟動的時候直接加載到內(nèi)存,避免需要數(shù)據(jù)時去查詢數(shù)據(jù)庫,造成不必要的IO消耗
環(huán)境
- SpringBoot
- maven
后端代碼
pom依賴
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>service層
package com.example.demo.service;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.google.common.collect.Maps;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
* @author jn
* @date 2022/2/24 上午9:20
*/
/**解釋
被@PostConstruct修飾的方法會在服務(wù)器加載Servlet的時候運行,并且只會被服務(wù)器執(zhí)行一次。
PostConstruct在構(gòu)造函數(shù)之后執(zhí)行,init()方法之前執(zhí)行。
這里加載的順序是:SpringBoot的主啟動類啟動 --> 掃描到EvaluationServiceImpl --> 初始化allEvaluationMap
--> @PostConstruct修飾的方法 --> loadTeachingOrg()方法
這樣當(dāng)接口注入EvaluationServiceImpl后,直接調(diào)用EvaluationServiceImpl的方法loadTeachingOrg就可以拿到內(nèi)存的數(shù)據(jù)
不需要再走DB
*/
@Service
@Slf4j
public class EvaluationServiceImpl {
private Logger logger = LoggerFactory.getLogger(EvaluationServiceImpl.class);
Map<Long, String> allEvaluationMap = Maps.newHashMap();
@PostConstruct
void init(){
loadTeachingOrg();
}
public void loadTeachingOrg(){
//假設(shè):查DB得到的數(shù)據(jù)如下
Map<Long, String> map = new HashMap<>();
map.put(1L, "評價1");
map.put(2L, "評價2");
map.put(3L, "評價3");
//放入內(nèi)存
allEvaluationMap = map;
}
/**
* 獲取當(dāng)前學(xué)期的所有的評價類別
*/
public Map<Long, String> getAllEvaluationMap(){
return allEvaluationMap;
}
}
controller層
@RestController
@RequestMapping("/api/evaluation")
public class EvaluationController {
@Resource
private EvaluationServiceImpl evaluationService;
@RequestMapping("all")
public Map<Long, String> result(){
Map<Long, String> allEvaluationMap = evaluationService.getAllEvaluationMap();
System.out.println(allEvaluationMap);
return allEvaluationMap;
}
}結(jié)果:

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
nacos在liunx系統(tǒng)中啟動成功瀏覽器卻訪問不了的解決方法
在linux下搭建nacos,現(xiàn)在想要啟動,訪問nacos頁面,訪問不了,所以本文小編將給大家介紹nacos在liunx系統(tǒng)中啟動成功,瀏覽器卻訪問不了?全面的解決辦法,需要的朋友可以參考下2023-09-09
SpringBoot接收接口入?yún)⒌姆绞叫〗Y(jié)
這篇文章主要給大家介紹了SpringBoot接收接口入?yún)⒌膸追N方式,我們從調(diào)用方的視角去看待這個問題,對調(diào)用方來說,它在調(diào)用接口時有好幾種傳參方式,下面,將會依次對這幾種參數(shù)方式進(jìn)行講解和代碼示例,需要的朋友可以參考下2024-01-01
Java實現(xiàn)warcraft?java版游戲的示例代碼
致敬經(jīng)典的warcraft,《warcraft?java版》是一款即時戰(zhàn)略題材單機游戲,采用魔獸原味風(fēng)格和機制。本文將用java語言實現(xiàn),采用了swing技術(shù)進(jìn)行了界面化處理,感興趣的可以了解一下2022-09-09

