java项目启动加载数据_Spring 启动时加载数据到内存

项目中需要在项目启动时把一些基础公共数据预加载到内存中,由于我们的基础数据是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配置如下:

CommonCode.xml:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值