史上最简单 Springboot 启动工程的时访问一次数据库,加载到全局缓存

在项目启动时读取一次 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 initTestData = new ConcurrentHashMap<>();

    @Override
    public void afterPropertiesSet() throws Exception {
   		System.out.println("我也可以初始化,选一个就可以啦");
    }

    @Override
    public void setServletContext(ServletContext servletContext) {
        List 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

注意:此作用是用于查询数据库中配置信息的,且只在启动的时候查一次,如果该参数经常修改建议不要用这种方法。如果数据库配置修改了,一定要重新启动该项目才能生效

你可能感兴趣的:(史上最简单 Springboot 启动工程的时访问一次数据库,加载到全局缓存)