项目启动初始化数据到内存中
程序员文章站
2022-07-05 23:21:31
...
有一部分数据库数据需要在项目启动时就加载到内存中,以减少数据库交互次数.降低服务器和数据库压力.
可以利用对象初始化静态变量时,赋予数据库的数据,已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();
}
}
上一篇: 如何做到“恰好一次”地传递数十亿条消息
下一篇: adb push 使用方法