`
laolinshi
  • 浏览: 41390 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring中动态加载配置文件

 
阅读更多

   一般系统中spring配置文件的加载都是在系统启动的时候进行的,启动之后系统就可以获得配置文件定义的Bean了。但希望不重新启动系统,系统又可以在运行过程动态加载配置文件获得新定义的Bean时,改怎样实现呢?本文给出了一个通过动态加载配置文件实现数据源切换功能的过程。

   

    因为不同的数据源是通过不同的spring配置文件进行定义的,所以下面先给出spring文件的配置内容。针对Oracle数据库,先编写一个OracleDatasourceContext.xml的文件,该文件定义了一个ApplicationContext类型的Bean,该Bean负责加载相应的数据源,内容如下:

   

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <!-- Just keep one bean in this file, don't define more !-->
    <bean id="DataSourceContext"
          class="org.springframework.context.support.ClassPathXmlApplicationContext" lazy-init="true">
        <constructor-arg>
            <list>
                <value>config/common/OracleDataSource.xml</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

   然后在OracheDataSource.xml中定义了数据源的实现类,这里采用apache提供的数据源实现类,配置如下:

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="getSysDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    	<property name="url" value="jdbc:oracle:thin:@10.10.7.111:1521:hccdev"/>
    	<property name="username" value="TMCII"/>
    	<property name="password" value="TMCII"/>
    </bean>

</beans>

    同样,为了实现支持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 beanId="getSysDataSource";
BeanFactoryLocator  sysCtxLocator = SingletonBeanFactoryLocator.getInstance(dataSourceContext);
BeanFactoryReference brf = sysCtxLocator .useBeanFactory(contextKey);
DataSource ds=brf.getFactory().getBean(beanId);

 上面的代码的功能是获得Oracle对应的数据源,把代码中的dataSourceContext赋值为mySQLDataSourceContext.xml就可以获得mysql对应的数据源了。

分享到:
评论
1 楼 caotameimei 2015-09-14  
写的非常好

相关推荐

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring中使用classpath加载配置文件浅析

    理解Spring加载配置文件的方式非常重要,因为这关系到配置文件在应用中的有效加载。如果配置文件位置有误或路径指定不正确,Spring将无法找到所需的配置文件,从而导致应用启动失败或行为异常。 此外,配置文件的...

    Spring中如何加载多个配置文件.pdf

    第三种方式是在主配置文件中通过`&lt;import&gt;`标签导入其他配置文件。这种方式可以让各个配置文件更加模块化,便于管理和维护。 **示例代码:** 1. **主配置文件a1.xml:** ```xml &lt;beans xmlns="http://www.spring...

    Spring 加载多个配置文件

    除了直接通过 ApplicationContext 或者 ContextLoaderListener 加载配置文件,还可以在现有的 XML 配置文件中使用 `&lt;import&gt;` 标签导入其他的配置文件。这种方式允许开发者在主配置文件中引用其他辅助配置文件,...

    spring加载多个配置文件

    例如,主配置文件中可以这样写: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    Spring依赖包和配置文件

    1. **Maven/Gradle**:现代项目中,通常使用构建工具(如Maven或Gradle)来管理依赖,只需在pom.xml或build.gradle文件中添加对应的Spring库依赖。 2. **自动配置**:Spring Boot引入了自动配置的概念,根据类路径...

    spring配置文件加密实现

    在Spring框架中,配置文件通常包含了应用程序的重要信息,如数据库连接、bean的定义以及服务器的配置等。为了保护这些敏感信息不被...通过以上步骤,我们可以有效地保护Spring配置文件中的敏感信息,提升应用的安全性。

    Spring Boot多模块配置文件读取

    - Spring Boot提供了`@ConfigurationProperties`注解,可以将配置文件中的键值对映射到Java对象的属性上,增强代码的可读性。 - 创建一个类,用`@Component`或`@Configuration`注解,并使用`@...

    Spring3.0 配置文件中加载Properties文件的小例子

    本篇将详细讲解如何在Spring 3.0的配置文件中加载Properties文件,以便在运行时动态获取和使用这些配置。 首先,我们需要一个Properties文件,例如`application.properties`,它通常放在项目的类路径根目录下。这个...

    spring读取jar中的配置文件

    在`AppProperties`类中,我们可以定义属性的字段,并通过`@ConfigurationProperties`注解指定前缀,Spring Boot会自动从配置文件中匹配并注入值。 为了使Spring Boot能够找到JAR内的配置文件,可以在`src/main/...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    spring读取配置文件

    假设你有一个复杂的项目结构,配置文件分散在多个目录下,你可以创建一个主配置文件,然后在这个主配置文件中通过`import`元素来引用其他目录的配置文件。例如,你可以在`/config/main-config.xml`中写入如下内容: ...

    如何加载jar包中的spring配置文件

    在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...

    Spring配置文件集合

    在本压缩包中,我们找到了一系列与Spring相关的配置文件,这些文件在构建JavaWeb应用时起着至关重要的作用。 1. `jdbc.properties`: 这个文件通常用于存储数据库连接的相关信息,如URL、用户名、密码等。它是Spring...

    加载jar包中的spring配置文件

    例如,`classpath:spring-context.xml`意味着Spring会尝试在类路径下的`spring-context.xml`文件中加载配置。 3. **`classpath*:`前缀**:这个前缀与`classpath:`类似,但有一个重要的区别。`classpath*:`不仅会...

    spring 配置文件详解

    在 Spring 容器启动时,Spring 将根据配置文件中的定义,自动装配这些依赖关系。 3. Bean 生产和实例分发:在 Spring 配置文件中,可以定义 Bean 的生产和实例分发策略,例如 singleton、prototype 等。Spring 容器...

    springmvc + spring + mybatis + maven整合配置文件

    整合这些技术,我们首先需要在pom.xml文件中添加对应的依赖。然后配置Spring的applicationContext.xml,包括Bean定义、AOP配置、数据源、事务管理器等。接着配置Spring MVC的servlet-context.xml,设置...

    Spring 最全约束配置文件

    - **约束条件**:Spring框架通过在配置文件中使用特定的元素和属性来定义约束条件。例如,可以使用`&lt;context:component-scan&gt;`来指定扫描特定包下的组件;或者使用`&lt;aop:aspectj-autoproxy&gt;`来启用基于AspectJ的自动...

    spring 所有包和配置文件

    在"spring 所有包和配置文件"这个主题中,我们将深入探讨Spring框架的主要组件、配置文件以及它们如何协同工作。 首先,Spring框架的核心在于它的容器,主要有两种:BeanFactory和ApplicationContext。BeanFactory...

Global site tag (gtag.js) - Google Analytics