洞察如何通过低成本家政服务app实现高效管理与数字化转型
1582
2022-12-08
Spring技巧之如何动态读取配置文件
目录Spring 动态读取配置文件需求背景方案一方案二方案三动态读取配置文件中的信息1、首先是写一个配置文件,方便动态加载1、利用类加载器等读取配置文件
Spring 动态读取配置文件
需求背景
最近碰到的需求大概是这样,我们要在一个现有的项目基础上进行二次开发,但又不愿意碰原有项目里的代码。所以采用了Maven依赖的方式——新建一个Maven项目作为主要开发环境,将原有项目作为Maven依赖(war形式)引入进来。这样在新建的扩展项目中打包出来的war将会是合并两个项目的所有代码。
而在实际搭建的过程中碰到这样一个问题,Spring配置文件中的
方案一
以上关于
但是这样带来的坏处就是:
1. 将发现错误的时机推迟到了运行时,这在系统比较庞大时实在是大忌。
2. 属性重复时的替换危机,这种BUG想要找出来,耗费的时间和精力想想就不寒而栗。
方案二
第二个方法 就是BeanFactoryPostProcessor接口,注意该接口的回调时机早于占位符替换 操作。
// BeanFactoryPostProcessor.postProcessBeanFactory
@Override
public 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;
}
// 注入http://到特定的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值
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~