欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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();
	}


}