在项目启动时读取一次 DB,然后将 DB 数据直接赋值给全局静态变量
新建一个InitTestDataListener 类,实现InitializingBean, ServletContextAware,变量声明为静态全局的,直接使用就可以
代码如下:
package com.springboot.demo.component;
import com.springboot.demo.model.dao.Test;
import com.springboot.demo.service.InitTestDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.ServletContextAware;
import javax.servlet.ServletContext;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Configuration
public class InitTestDataConfig implements InitializingBean, ServletContextAware {
/**
* 日志
*/
private static final Logger logger= LoggerFactory.getLogger(InitTestDataConfig.class);
@Autowired
private InitTestDataService initTestDataService;
public static Map<String, Test> initTestData = new ConcurrentHashMap<>();
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("我也可以初始化,选一个就可以啦");
}
@Override
public void setServletContext(ServletContext servletContext) {
List<Test> datas = initTestDataService.queryTestDataAll();
if (datas != null && !datas.isEmpty()) {
for (Test data : datas)
initTestData.put(data.getKey(), data);
logger.info("***initTestData initialization successful***");
} else {
logger.info("***test DB is empty, please configure the corresponding data***");
}
}
}
最后用的时候直接用类名就可以调用了: InitTestDataListener.initTestData
注意:此作用是用于查询数据库中配置信息的,且只在启动的时候查一次,如果该参数经常修改建议不要用这种方法。如果数据库配置修改了,一定要重新启动该项目才能生效
版权声明:本文为weixin_42670455原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。