1. 程式人生 > >專案啟動初始化資料到記憶體中

專案啟動初始化資料到記憶體中

有一部分資料庫資料需要在專案啟動時就載入到記憶體中,以減少資料庫互動次數.降低伺服器和資料庫壓力.

可以利用物件初始化靜態變數時,賦予資料庫的資料,已ueser表為例

1、資料庫互動的Mapper,獲取資料庫資訊

public interface UserMapper {
	
	
	@MapKey("userName")
	@Select("SELECT * FROM userEntity")
	@Results({
		@Result(column="user_sex",property="userSex")
	})
	Map<String,User> listMap();
	
}

2、資料初始類

public class DataInit {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(DataInit.class);
	
    // 靜態map物件
	private static Map<String,User> dataMap = new HashMap<String,User>();
	
	@Autowired
	private UserMapper userMapper;
	
    // 在構造方法執行後執行
	@PostConstruct  
	public void init() {
		initMap();
	}
	
	public void initMap() {
		dataMap = userMapper.listMap();
	}
	
	public static Map<String,User> getDataMap(){
		return dataMap;
	}
	
	

}

 

3、專案啟動時載入

@SpringBootApplication
@EnableTransactionManagement
@MapperScan("com.test.eurekaMybatis.mapper")
public class EurekaMybatisApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaMybatisApplication.class, args);
	}
	
    // 生成bean
	@Bean
	DataInit dataInit() {
		return new DataInit();
	}
}

 

4、直接引入使用

@RestController
@RequestMapping("/user")
public class UserController {


    @Autowired
	private DataInit dataInit;


    @RequestMapping("/test")
	public void test(String key) {
		Map<String,User> map = DataInit.getDataMap();
		User user = map.get(key);
		LOGGER.info("name : {}, id : {}",user.getUserName(),user.getId());
	}


    @RequestMapping("/refresh")
	public void refresh() {
		
		dataInit.initMap();
	}


}