spring 啟動載入資料,訪問資料庫
阿新 • • 發佈:2018-12-20
首先,說下應用場景。
專案中時常會用到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,一切搞定