如何动态的获取property文件的信息
2017-03-13 00:00
369 查看
摘要: 使用ResourceBundle,动态获取bundle来更新资源配置
使用ResourceBundle类可以获取资源信息.如,通过getBundle("资源名")来获取一个propertie文件的文本内容,并将其转化为Map的形式存储.看了一点源码,ResourceBundle类在加载时就创建了一个ConcurrentMap<CacheKey, BundleReference> cacheList,所有的Bundle资源在查找之后就存储到cacheList中,每次获取先从cacheList中获取,这样就有缓存.只有判断当bundle发生变化时,才重新通过名称进行查找.
当然,还有更简单的方法,使用 ResourceBundle.Control类来控制重载时间和是否需要重载,需要重写getTimeToLive和needsReload方法,一个设置重载时间,一个判断是否需要重载,这样就可以实现按时重载.
appConfig.properties
使用ResourceBundle类可以获取资源信息.如,通过getBundle("资源名")来获取一个propertie文件的文本内容,并将其转化为Map的形式存储.看了一点源码,ResourceBundle类在加载时就创建了一个ConcurrentMap<CacheKey, BundleReference> cacheList,所有的Bundle资源在查找之后就存储到cacheList中,每次获取先从cacheList中获取,这样就有缓存.只有判断当bundle发生变化时,才重新通过名称进行查找.
当然,还有更简单的方法,使用 ResourceBundle.Control类来控制重载时间和是否需要重载,需要重写getTimeToLive和needsReload方法,一个设置重载时间,一个判断是否需要重载,这样就可以实现按时重载.
package com.sanji.mall.app.action; import com.sanji.mall.app.goods.controller.GoodsController; import com.sanji.mall.app.util.ResponseFactory; import com.sanji.mall.common.util.ResourceUtil; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.*; /** * 示例url: localhost:端口号:/appApi/hello/index * Created by yangqc on 2017/2/24. */ @Controller @RequestMapping("/common") public class CommonController { private final Logger logger = Logger.getLogger(GoodsController.class); /** * 定义一个control进行控制 */ private ResourceBundle.Control control = new ResourceBundle.Control() { @Override public long getTimeToLive(String baseName, Locale locale) { return 0; // return 1000 * 60 * 10; } @Override public boolean needsReload(String baseName, Locale locale, String format, ClassLoader loader, ResourceBundle bundle, long loadTime) { return true; } }; /** * 获取手机页轮播地址及跳转参数; * * @return */ @RequestMapping("/switchPic") @ResponseBody public Object getPic() { try { String preUrl = ResourceUtil.get("stwitchPicPreUrl"); // ResourceBundle.clearCache(); String[] picValues = ResourceBundle.getBundle("appConfig", control).getString("appSwitchGoodsUrls").split(";"); List<Map<String, String>> reList = new ArrayList<>(); for (String picValue : picValues) { handlePicItem(preUrl, reList, picValue); } return ResponseFactory.getSuccussed(reList); } catch (Exception e) { logger.info("获取轮播图片异常:" + e.getMessage()); return ResponseFactory.getFailed("获取轮播图片失败" + e.getLocalizedMessage()); } } /** * 处理一个图片轮播地址项 */ private void handlePicItem(String preUrl, List<Map<String, String>> reList, String picValue) { Map<String, String> remap = new HashMap<String, String>(); String[] vals = picValue.split("-->"); remap.put("ingUrl", preUrl + vals[0]); remap.put("num", vals[1]); remap.put("type", vals[2]); reList.add(remap); } }
appConfig.properties
# 图片文件-->num-->type;每项之间用英文逗号隔开;num为编码, type:手机类为sj;配件类为accessory appSwitchGoodsUrls=1.png-->121-->sj;2.png-->1570-->sj;3.png-->1544-->sj;4.png-->121-->sj;5.png-->905367-->accessory;
相关文章推荐
- 【原创】如何获取系统目录和文件信息
- Android如何获取多媒体文件信息
- Spring配置文件中使用PropertyPlaceholderConfigurer配置获取jdbc的配置信息
- Android平台中应该如何获取音乐文件的信息
- java流学习-如何获取文件的属性信息
- 如何从SQL Server备份文件中获取数据库相关信息?
- 如何获取XML文件里配置的信息
- 【java常见问题】——如何获取文件的属性信息?
- 如何从SQL Server备份文件中获取数据库相关信息?
- HDFS——如何获取文件的属性信息
- Android平台中应该如何获取音乐文件的信息
- Android平台中应该如何获取音乐文件的信息
- Android平台中应该如何获取音乐文件的信息
- 当将图片文件放在与项目同级的目录下时该如何获取图片信息
- 如何获取文件信息
- 如何获取多媒体文件信息
- 【jQuery】如何获取uploadify上传文件后的返回信息.
- Android平台中应该如何获取音乐文件的信息
- 如何从mp3,wma等音频文件中获取歌曲信息
- MP4系列之--如何获取mp4文件信息