Spring起動時にデータをメモリにロードする

4625 ワード

プロジェクトのスタート時に基礎公共データをメモリにプリロードする必要があります.私達の基礎データはXML配置の方式ですので、springの注入を直接利用して、配置ファイルに配置すればいいです.
まずJavaコードは以下の通りです.mapにmapを保存する形式を採用します.
 
public class PublicCode {

    public static Map> codeMap = new HashMap>();

    public Map> getCodeMap() {
        return codeMap;
    }

    public static String getNameChn(String type, String key) {

        return codeMap.get(type).get(key);
    }
}
 XMLコードは以下の通りです
 
 
    

    
        
            
                
                
            
        
    

    
        
            
                
                
                
                
                
            
        
    
 
 
二番目の方法もあります.BeanPostProcessorインターフェースを実現するために、DBから一度にロードするのに適しています.次の例はまだXMLから読み込まれています.
 
public class CommonCodeBeanPostProcessor implements BeanPostProcessor {
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		if(bean instanceof CommonCode) {  
			((CommonCode)bean).loadMap();
		}
		return bean;
	}
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		return bean;
	}
}
 
public class CommonCode {
	
	public static final String NAME = "name";
	
	public static final String KEY = "key";
	
	public static final String VALUE = "value";
	
	public static final Map MAP = new HashMap();
	
	private Resource resourceXML;
	
	public CommonCode() {
		
	}
	
	public void loadMap() {
		Assert.notNull(resourceXML,"resourceXML must be not null");
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document doc = builder.parse(resourceXML.getInputStream());
			Element root = doc.getDocumentElement();
			if (root == null) {
				return;
			}
			NodeList codeNodeList = root.getChildNodes();
			String name = null;
			for (int i=0; i < codeNodeList.getLength(); i++) {
				Node node = (Node) codeNodeList.item(i); 
				if (node != null && node.getNodeType() == Node.ELEMENT_NODE) { 
					name = node.getAttributes().getNamedItem(NAME).getNodeValue();
					Map m = null;
					if (!MAP.containsKey(name)) {
						m = new HashMap();
						MAP.put(name, m);
					} else {
						m = (Map) MAP.get(name);
					}
					NodeList keyValues = node.getChildNodes();
					for (int j=0; j < keyValues.getLength(); j++) {
						Node key = (Node)keyValues.item(j);
						if (key != null && key.getNodeType() == Node.ELEMENT_NODE) { 
							m.put(key.getAttributes().getNamedItem(KEY).getNodeValue(), key.getAttributes().getNamedItem(VALUE).getNodeValue());
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Resource getResourceXML() {
		return resourceXML;
	}

	public void setResourceXML(Resource resourceXML) {
		this.resourceXML = resourceXML;
	}

}
 Springの構成は以下の通りです.
 
 

	

 
 
Common Code.xml: