1. 程式人生 > >spring 啟動載入資料,訪問資料庫

spring 啟動載入資料,訪問資料庫

首先,說下應用場景。

專案中時常會用到spring專案啟動需要載入一些全域性資料,如訪問資料庫獲取一些基本公共資料,為此就需要在啟動載入時訪問資料,為此,專門研究了一下,發現現在網上能搜到的主要是implements InitializingBean, ServletContextAware此方法。

在此,通過實踐發現,可以通過一下兩種方式實現

1、方式1:implements InitializingBean, ServletContextAware介面,並在spring.xml中配置該bean

<bean id="test1" class="com.util.Test1" ></bean>

     程式碼如下:

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

import javax.annotation.PostConstruct;
import javax.servlet.ServletContext;

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.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;

import com.dao.UtilDao;


@Component
@Lazy(false)
public class Test1 implements InitializingBean, ServletContextAware{
 
	@Autowired
	private  UtilDao utilDao;
	
	public static  Map<String,String> cacheShareMap = new HashMap<String,String>();
	private Logger log = LoggerFactory.getLogger(Test1.class);
	
	@Override
	public void setServletContext(ServletContext sc) {
		init();
	}
	
	@PostConstruct
	private void init() {
		log.info("------------------資料初始化開始-------------------");
		String sql = "select share_value from tshare t ";
		List<Map<String, String>> shareList = (List<Map<String, String>>) utilDao.selectBySql(sql);
		if( shareList != null && shareList.size()>0) {
			Map<String,String> mapTemp = new HashMap<String,String>();
			for(int i=0;i<shareList.size();i++) {
				mapTemp.clear();
				mapTemp = (Map<String, String>)shareList.get(i);
				cachecacheShareMap.put(mapTemp.get("share_value"));
			}
		}
		log.info("------------------資料初始化完成-------------------");
	}
	
	@Override
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		
	}
}

2 方式2:比起方式1, 方式2超級簡單(哈哈哈哈。。。。)

廢話不多說,直接上程式碼

​

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.dao.UtilDao;

public class Test2{
	@Autowired
	private  UtilDao utilDao;
	
	public static  Map<String,String> cacheMap2 = new HashMap<String,String>();
	private Logger log = LoggerFactory.getLogger(Test2.class);
	public void init() {
		log.info("------------------測試2初始化開始-------------------");
		String sql = "select share_value from tshare t ";
		List<Map<String, String>> cacheMapList = (List<Map<String, String>>) utilDao.selectBySql(sql);
		if(cacheMapList != null && cacheMapList .size()>0) {
			Map<String,String> mapTemp = new HashMap<String,String>();
			for(int i=0;i<cacheMapLista.size();i++) {
				mapTemp.clear();
				mapTemp = (Map<String, String>)cacheMapList.get(i);
				cacheMap2.put(mapTemp.get("share_value"));
			}
		}
		log.info("------------------測試2初始化完成-------------------");
	}
}

​

關鍵點來了,那就是在spring.xml中配置bean是,需要配配置init-method屬性

<bean id="tes2" class="com.util.Test2" init-method="init"></bean>

這就是最關鍵的地方,只要配置了init-method="init"  這個"init"就是Test2的init()方法,這樣,啟動載入bean時就會自動執行init方法,達到初始化資料的目的,全域性可用,注意,一定要將呼叫的全域性屬性設為靜態

public static  Map<String,String> cacheDictMap2

OK,一切搞定