專案啟動初始化資料到記憶體中
阿新 • • 發佈:2018-11-21
有一部分資料庫資料需要在專案啟動時就載入到記憶體中,以減少資料庫互動次數.降低伺服器和資料庫壓力.
可以利用物件初始化靜態變數時,賦予資料庫的資料,已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();
}
}