SpringBoot啓動時執行初始化某些數據(InitializingBean)

業務場景,在項目開發的過程中我們經常會遇到一些數據基本不變,但有可能需要頻繁的從網絡或者數據庫的獲取,這時我們就可在項目啓動的時候初始化一次就好。

下面我們以發短信時需要加上國家編碼爲例:

首先我們需求是在項目啓動的時候初始化這個數據的話,這個實現需求的話需要實現InitializingBean接口。這樣只要項目啓動時數據就會初始化。話不多說直接上代碼

package com.hongyu.config;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONArray;
import com.hongyu.domain.vo.CountryVo;
import com.hongyu.untils.USDT4HttpUtils;

import lombok.extern.slf4j.Slf4j;

/**
 * 初始化國家編碼數據
 * @author Administrator
 *
 */
@Slf4j
@Component
public class CountryInitService implements InitializingBean{

	private static ConcurrentHashMap<String, CountryVo> countries = new ConcurrentHashMap<String, CountryVo>();

	/**
	 * 根據國家編碼獲取數字代碼
	 * @param countryCode
	 * @return
	 */
	public String getTelephoneCode(String countryCode) {
		CountryVo countryDto = countries.get( countryCode );
		if (countryDto == null) {
			return null;
		}
		return countryDto.getTelephoneCode();
	}

	/**
	 * 判斷國家編碼是否存在
	 * @param countryCode
	 * @return
	 */
	public Boolean isEnable(String countryCode) {
		CountryVo countryDto = countries.get( countryCode );
		if (countryDto == null) {
			return false;
		}
		return countryDto.getEnable();
	}
	
	
	@Override
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		initProvince();
		System.out.println(getTelephoneCode("CN"));
	}
	
	/**
	 * 初始化
	 */
	private static void initProvince() {
        String url = "https://citex-default.oss-cn-hongkong.aliyuncs.com/country.json";
        try {
            String res = USDT4HttpUtils.httpGet(url);
            List<CountryVo> list = JSONArray.parseArray(res, CountryVo.class);
            Map<String, CountryVo> map = list.stream().collect( Collectors.toMap( CountryVo::getId, Function.identity()) );
    	    countries.putAll( map ); 
        } catch (Exception e) {
            log.error("執行初始化代碼失敗", e);
        }
    }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章