Spring起動時にデータをメモリにロードする
4625 ワード
プロジェクトのスタート時に基礎公共データをメモリにプリロードする必要があります.私達の基礎データはXML配置の方式ですので、springの注入を直接利用して、配置ファイルに配置すればいいです.
まずJavaコードは以下の通りです.mapにmapを保存する形式を採用します.
二番目の方法もあります.BeanPostProcessorインターフェースを実現するために、DBから一度にロードするのに適しています.次の例はまだXMLから読み込まれています.
Common Code.xml:
まず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: