Springboot 在启动工程的时访问一次数据库,加载到全局变量

项目启动时读取一次数据库参数,以后直接使用

新建一个InitDataListener类,实现InitializingBean, ServletContextAware,变量声明为静态全局的,直接使用就可以

package com.AAA;

import com.AAA.sys.service.SysConfigService;
import com.AAA.util.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;

import javax.servlet.ServletContext;
import java.util.Map;

@Component
public class InitDataListener implements InitializingBean, ServletContextAware {

    public static String PARAM_KEY;
    public static String PARAM_VALUE;

    @Autowired
    SysConfigService configService;

    public static String getParamKey() {
        return PARAM_KEY;
    }

    public static String getParamValue() {
        return PARAM_VALUE;
    }

    @Override
    public void afterPropertiesSet() throws Exception {

    }

    @Override
    public void setServletContext(ServletContext servletContext) {
        Map resMap = configService.getMinioMap(null);
        PARAM_KEY = StringUtils.getStringByObj(resMap.get("PARAM_KEY"));
        PARAM_VALUE = StringUtils.getStringByObj(resMap.get("PARAM_VALUE"));
    }
}




其他 看一下 接口 层

package com.AAA.sys.service;


import java.util.Map;

public interface SysConfigService {
 
    Map<String, String> getMinioMap(Map map );
}

package com.AAA.sys.service.impl;

import com.AAA.base.util.MD5Util;
import com.AAA.entity.SysConfig;
import com.AAA.share.dao.SysConfigDao;
import com.AAA.sys.service.SysConfigService;
import com.AAA.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

 
@Service
public class SysConfigServiceImpl implements SysConfigService {

    @Autowired
    private SysConfigDao sysConfigDao;
  
    @Override
    public Map<String, String> getMinioMap(Map map) {
        return sysConfigDao.getMinioMap(map);
    }


}




//DAO

package com.AAA.share.dao;

import com.AAA.base.dao.GenericDao;
import com.AAA.entity.SysConfig;

import java.util.List;
import java.util.Map;

public interface SysConfigDao extends GenericDao<SysConfig, Integer> {
 
    Map<String, String> getMinioMap(Map map );
}


//DAO 实现 
package com.AAA.share.dao.impl;

import com.AAA.base.dao.impl.GenericDaoHibernate;
import com.AAA.entity.SysConfig;
import com.AAA.share.dao.SysConfigDao;
import com.AAA.util.StringUtils;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Repository
public class SysConfigDaoImpl extends GenericDaoHibernate<SysConfig, Integer> implements SysConfigDao {

    public SysConfigDaoImpl() {
        super(SysConfig.class);
    }

 
    @Override
    public  Map<String, String> getMinioMap(Map map ) {
        Map resMap = new HashMap();
        String sql = "SELECT PARAM_KEY,PARAM_VALUE FROM sys_params WHERE PARAM_GROUP='MINIO_CONFIG' or PARAM_GROUP='UPLOAD_CONFIG' ";
        List myList = findBySql(sql, null);
        if (myList.size() > 0) {
            for (int i = 0; i < myList.size(); i++) {
                Map map_tem = (Map) myList.get(i);
                String PARAM_KEY = StringUtils.getStringByObj(map_tem.get("PARAM_KEY"));
                String PARAM_VALUE = StringUtils.getStringByObj(map_tem.get("PARAM_VALUE"));
                resMap.put(PARAM_KEY,PARAM_VALUE);
            }
        }
        return  resMap;
    }
}

最后用的时候直接用类名就可以调用了

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

有疑问 可联系我
java技术交流 QQ 群:201455739