项目启动初始化数据到内存中

有一部分数据库数据需要在项目启动时就加载到内存中,以减少数据库交互次数.降低服务器和数据库压力.

可以利用对象初始化静态变量时,赋予数据库的数据,已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();
	}


}

猜你喜欢

转载自blog.csdn.net/SHIYUN123zw/article/details/82495197