Spring技巧之如何动态读取配置文件
目录
- Spring 动态读取配置文件
- 需求背景
- 方案一
- 方案二
- 方案三
- 动态读取配置文件中的信息
- 1、首先是写一个配置文件,方便动态加载
- 1、利用类加载器等读取配置文件
Spring 动态读取配置文件
需求背景
最近碰到的需求大概是这样,我们要在一个现有的项目基础上进行二次开发,但又不愿意碰原有项目里的代码。所以采用了Maven依赖的方式——新建一个Maven项目作为主要开发环境,将原有项目作为Maven依赖(war形式)引入进来。这样在新建的扩展项目中打包出来的war将会是合并两个项目的所有代码。
而在实际搭建的过程中碰到这样一个问题,Spring配置文件中的
方案一
以上关于
但是这样带来的坏处就是:
1. 将发现错误的时机推迟到了运行时,这在系统比较庞大时实在是大忌。
2. 属性重复时的替换危机,这种BUG想要找出来,耗费的时间和精力想想就不寒而栗。
方案二
第二个方法 就是BeanFactoryPostProcessor接口,注意该接口的回调时机早于占位符替换 操作。
// BeanFactoryPostProcessor.postProcessBeanFactory@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {// 我们自己去读取指定的配置文件Properties prop = null ; try {prop = PropertiesLoaderUtils.loadAllProperties("extend/db.properties", Thread.currentThread().getContextClassLoader()); } catch (IOException e) {e.printStackTrace(); }if(null == prop){return; }// 注入到特定的Bean的特定属性中BeanDefinition beanDefinition = beanFactory.getBeanDefinition("dataSource_extend"); beanDefinition.getPropertyValues().add("url", prop.getProperty("db.sd.url")); beanDefinition.getPropertyValues().add("driverClassName",prop.getProperty("db.sd.driverClassName")); beanDefinition.getPropertyValues().add("username", prop.getProperty("db.sd.username")); beanDefinition.getPropertyValues().add("password", prop.getProperty("db.sd.password")); super.postProcessBeanFactory(beanFactory); }
方案三
还有一种方法就是使用Spring的父子容器的关系,将这个
动态读取配置文件中的信息
1、首先是写一个配置文件,方便动态加载
jedis.properties
key-value形式保存
文章图片
1、利用类加载器等读取配置文件
1.读取配置文件
InputStream is=JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
2.创建properties对象
Properteis pro=new Properties();
3.关联文件
pro.load(is);
4.然后在项目中可以动态加载key获取到value值
文章图片
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- Activiti(一)SpringBoot2集成Activiti6
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜