spring中动态加载配置文件

一般系统中spring配置文件的加载都是在系统启动的时候进行的,启动之后系统就可以获得配置文件定义的Bean了。但希望不重新启动系统,系统又可以在运行过程动态加载配置文件获得新定义的Bean时,改怎样实现呢?本文给出了一个通过动态加载配置文件实现数据源切换功能的过程。 因为不同的数据源是通过不同的spring配置文件进行定义的,所以下面先给出spring文件的配置内容。针对Oracle数据库,先编写一个OracleDatasourceContext.xml的文件,该文件定义了一个ApplicationContext类型的Bean,该Bean负责加载相应的数据源,内容如下: config/common/OracleDataSource.xml 然后在OracheDataSource.xml中定义了数据源的实现类,这里采用apache提供的数据源实现类,配置如下: 同样,为了实现支持mysql数据源的功能,也需要定义两个这样的配置文件,一个和上面的OracleDatasourceContext.xml配置文件相对应,文件名为MySQLDatasourceContext.xml,该文件中定义了一个ApplicationContext类型的Bean,该Bean加载名称为mySQLDataSource.xml的配置文件,mySQLDataSource.xml和上面的OracheDataSource.xml相对应,该文件定义了一个针对mysql数据库的数据源实现。 配置文件定义完了,需要调用Oracle数据库对应的数据源时,改如何做呢?这就需要用到spring提供的名称为org.springframework.beans.factory.access.SingletonBeanFactoryLocator的类来实现,过程如下:首先,由于该类是一个工厂类,通过调用类中的getInstance(String selector)方法就可以获得一个SingletonBeanFactoryLocator的实例,selector参数就是定义了AppcationContext类型Bean的配置文件所在的路径,就比如上面的OracleDatasourceContext.xml和MySQLDatasourceContext.xml。获得了一个定位器的实例后,就可以调用SingletonBeanFactoryLocator中的useBeanFactory(String factoryKey)方法得到配置文件中定义的BeanFactory,这里是ClassPathXmlApplicationContext的具体实现类,该方法中参数factoryKey就是配置文件中的DataSourceContext。获得了具体的BeanFactory之后,就可以进行初始化,加载对应的数据源配置文件。然后通过BeanFactory的getBean方法就可以获得配置文件中定义的具体的数据源实现。整个动能就完成了,代码如下: String dataSourceContext="OracleDatasourceContext.xml";String contextKey="dataSourceContext";Strinb bean sysCtxLocator = SingletonBeanFactoryLocator.getInstance(dataSourceContext);BeanFactoryReference brf = sysCtxLocator .useBeanFactory(contextKey);DataSource ds=brf.getFactory().getBean(beanId); 上面的代码的功能是获得Oracle对应的数据源,把代码中的dataSourceContext赋值为mySQLDataSourceContext.xml就可以获得mysql对应的数据源了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值