spring在代码中获取多个properties文件的属性

18 篇文章 0 订阅

前2天在处理spring中动态获取properties所配置属性的内容,由于我所写的内容是一个工具类, **不知道配置文件名称,**一般我们在获取配置项的时候都会有一个指定的配置文件名称,然而今天却没有, 着实花费了一点点时间来摸索, 特此分享!
还有一个功能就是我这边区分了业务侧与公共侧配置文件所配置的目录,最后提供了一个接口类用于获取属性。

  1. 先贴配置文件 value值不要配置到具体的文件,配置到目录就好了。 这样后期扩展的配置文件丢到此目录即可!
<!-- 自定义系统参数加载 -->
		<!-- 配置文件--业务模块使用 -->
	<bean id="bizPropertiesLoader" class="com.xxxxx.xxxxparam.ParamDefinePropertiesLoader">
		<property name="locations">
			<value>classpath*:conf/product/**/*.properties</value>
		</property>
	</bean>
		<!-- 配置文件--公共侧使用 -->	
	<bean id="framePropertiesLoader" class="com.xxxx.xxx.param.ParamDefinePropertiesLoader">
		<property name="locations">
			<value>classpath*:conf/spring_properties/*.properties</value>
		</property>
	</bean>
  1. 初始化获取的配置文件内容的方法
    1) 这里继承了spring 的 PropertiesLoaderSupport.java 来调用此类中的mergeProperties方法。 获取配置内容的集合 得到 Properties。
    2)实现了InitializingBean此类。 此类中只有一个 afterPropertiesSet 方法。 这个方法将在所有的属性被初始化后调用,这样以下类就能调用 refresh 方法进行处理。 把配置内容都放到 ctxPropertiesMap 中,提供调用。
    上代码:
public class ParamDefinePropertiesLoader extends PropertiesLoaderSupport implements SysDefineParamInterface, InitializingBean{
	
	protected final Logger logger = LoggerFactory.getLogger(this.getClass());
	
	private Map<String, String> ctxPropertiesMap = new HashMap<String, String>();

	public String getParam(String key) {		
		return ctxPropertiesMap.get(key);
	}

	public void refresh() {
		ctxPropertiesMap.clear();
		try {
			Properties props = this.mergeProperties();
			for (Object key : props.keySet()){
	            String keyStr = key.toString();
	            String value = props.getProperty(keyStr);
	            ctxPropertiesMap.put(keyStr, value);
	           
	        }
			if (logger.isDebugEnabled()) {
				logger.debug("product app config info load success , load properties config info {}", props);
			}
		} catch (IOException e) {
			logger.error(e.getMessage(), e);
		}
		
		
	}
	
	public void afterPropertiesSet() throws Exception {
		this.setIgnoreResourceNotFound(true);
		refresh();
	}

}
  1. 提供2个方法去调用获取属性配置项目
public class PropertyConfigurerImpl implements PropertyConfigurerInf {

	//这个正好是我在XML配置文件中写的bean id
    @Autowired
    private ParamDefinePropertiesLoader bizPropertiesLoader;

    @Autowired
    private ParamDefinePropertiesLoader framePropertiesLoader;

	/**
     * 获取frame配置文件参数, 主要用于公共侧
     * 用法: 传key返回对应的value数据
     * classpath*:conf/spring_properties/*.properties
     * @param key
     * @return
     */
    @Override
    public String getFrameProperty(String key) {
        return framePropertiesLoader.getParam(key);
    }
	/**
     * 获取frame配置文件参数: 主要用于业务模块配置文件的加载
     * 用法: 传key返回对应的value数据
     * classpath*:conf/product/*.properties
     * @param key
     * @return
     */
    @Override
    public String getProductProperty(String key) {
        return bizPropertiesLoader.getParam(key);
    }
}

好了。 以上就是通过java代码动态获取properties配置文件中的代码,不管你的配置文件名称是啥, 只要写在指定目录下就能读取出来, 当然同一个目录中不同文件,存在相同的key,只取最后一项,这个需要注意!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值