`

使用Spring动态修改DataSource

阅读更多

最早发表时间:2008-12-03

 

    我们现在在做的这个项目使用了经典的框架Spring 2.0.2,开发环境是Eclipse 3.4。
    由于运行的程序有可能需要使用不同的数据库服务器,所以需要在程序启动的时候,根据某个配置文件来判断正要使用的数据库类型和连接方式。

    我编写了一个工具类用于获取Spring的配置文件并且初始化Spring工作的上下文环境,示例代码如下:

    /**
     * Updated at 上午11:49:55, on 2008-12-3<br>
     * 获取Spring的配置信息来初始化Spring的上下文环境信息
     * 
     * @return 返回Spring的上下文环境配置
     * @author Guokai
     */
    public static ApplicationContext getAppcxt () {
        if (appcxt == null) {
            String[] url = new String[] { "beanRefFactory.xml", "dataAccessContext.xml", "config/spring/*.xml" };
            appcxt = new ClassPathXmlApplicationContext(url);

            // 通过配置文件获取联网方式和数据源的配置信息
            initSubmitTypeAndConnectionType();
        }
        return appcxt;
    }

    /**
     * Updated at 上午11:49:26, on 2008-12-3<br>
     * 通过配置文件获取联网方式和数据源的配置信息
     * 
     * @author Guokai
     */
    private static void initSubmitTypeAndConnectionType () {
        // 获取配置文件
        InputStream configInStream = SpringHelper.class.getResourceAsStream("/config.properties");
        Properties properties = new Properties();
        try {
            properties.load(configInStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 根据数据库连接配置来设置数据源对象
        BasicDataSource basicDS = (BasicDataSource) appcxt.getBean("dataSource");
        try {
            // 这里需要先关闭数据源,才可以使新的数据源设置生效
            basicDS.close(); 
        } catch (SQLException e) {
            log.warn("关闭从Spring获取的数据源时出现异常!", e);
        }
        basicDS.setDriverClassName(properties.getProperty("jdbc.driverClassName"));
        basicDS.setUrl(properties.getProperty("jdbc.url"));
        basicDS.setUsername(properties.getProperty("jdbc.username"));
        basicDS.setPassword(properties.getProperty("jdbc.password"));
        basicDS.setMaxWait(Long.parseLong(properties.getProperty("jdbc.maxWait")));
    }

 

    通过调用工具类的getAppcxt()方法来获取Spring的运行环境对象,在初始化Spring运行环境对象的过程中从项目的src目录下的config.properties文件当中读取数据源配置,从而创建连接数据库的数据源对象。

还有以下几点需要说明:
1. 这里需要注意的是:在获取dataSource之后,需要将这个数据源首先关闭一下,因为有可能数据源已经处于打开的状态,如果不关闭的话,即使改变数据源的配置,之前创建的数据库连接还是根据旧有配置创建的那些连接对象;
2. 项目中 Spring 配置的数据源的 id 为 dataSource,类型为 org.apache.commons.dbcp.BasicDataSource。

分享到:
评论

相关推荐

    Spring动态切换datasource实现mysql多住多从

    2. **使用AOP(面向切面编程)**:AOP是Spring的一个重要特性,它可以让我们在不修改原有业务代码的情况下,通过切面进行拦截和处理。在这里,我们可以定义一个切面,用于在方法执行前后动态选择数据源。切面可以...

    SpringBoot多数据源配置(方式五:使用dynamic-datasource动态数据源插件).docx

    ### Spring Boot 多数据源配置(使用 dynamic-datasource 动态数据源插件) #### 一、多数据源背景及介绍 在 Spring Boot 应用开发过程中,开发者通常会为项目配置一个单一的数据源来执行数据库操作。然而,在某些...

    dynamic-datasource-spring-boot-starter_多数据源_

    `dynamic-datasource-spring-boot-starter`通过自动化配置和扩展点设计,使得开发者能够在不修改代码的情况下,轻松地在多个数据源之间切换。 **Spring Boot**是Spring框架的一个衍生项目,旨在简化Spring应用程序...

    spring动态数据源+mybatis分库分表

    在"spring-routing-datasource"这个文件中,可能包含了实现Spring动态数据源的示例代码,包括配置文件、路由数据源的实现以及与MyBatis的集成。通过研究这个例子,你可以更深入地理解如何在实际项目中部署和使用这种...

    Spring 动态切换数据源

    【Spring 动态切换数据源】是一种在Spring框架中实现的应用程序能够在运行时根据需求动态选择数据源的技术。这种功能对于多数据库环境或者需要对不同数据源执行操作的系统非常有用,例如数据聚合、报表生成等场景。 ...

    spring 数据库动态切换

    2. **使用AbstractRoutingDataSource**:Spring提供了一个抽象类`AbstractRoutingDataSource`,它可以根据一定的规则决定使用哪个DataSource。你需要继承这个类并覆盖其`determineCurrentLookupKey()`方法,该方法...

    动态数据源实现spring

    在Spring框架中,动态数据源实现...总的来说,动态数据源是Spring框架中的一项强大功能,它允许我们在不修改代码的情况下,根据运行时的条件灵活地切换数据源。这对于构建可扩展、可维护的大型企业级应用具有重大意义。

    SpringBoot使用编程方式配置DataSource的方法

    使用编程方式配置SpringBoot的DataSource SpringBoot框架提供了多种方式来配置DataSource,本文主要介绍使用编程方式配置DataSource的方法。这种方法可以让开发者拥有更高级别的控制权,忽略自动配置过程,从而实现...

    dynamic-datasource-spring-boot-starter-master.zip

    这个压缩包"dynamic-datasource-spring-boot-starter-master.zip"提供了一个快速启动的解决方案,使得开发者能够便捷地在SpringBoot应用中配置和管理多个数据源。 首先,我们要理解什么是SpringBoot。SpringBoot是...

    Spring boot连接oracle数据库JDBC配置步骤

    这里需要注意的是,`spring.datasource.primary.url` 配置需要根据自己的数据库实例进行修改,例如将 `SMARTMES` 替换为自己的数据库实例名称。同时,`spring.datasource.primary.username` 和 `spring.datasource....

    multiple-datasource-app.zip

    6. **使用数据源**:在业务代码中,不再直接引用具体的数据源,而是通过Spring的自动装配来使用`@Autowired` 注解的`DataSource`。由于`AbstractRoutingDataSource` 的设计,实际使用时会根据当前设置的数据源key来...

    springboot多数据源,DruidDataSource多数据源切换,不重启项目,修改数据库名解决方案

    项目背景: 1. Springboot项目 2. 一个主数据源,数据名称库不变。 3. 一个副数据源,数据库名称每天都在变,比如今天1号,是db_01; 明天2号,是db_02。 4.不重启项目切换数据源。 5.项目介绍: ...

    SpringBoot整合Mybatis使用Druid数据库连接池

    通过上述配置,我们便可以使用 Spring Boot 整合 Mybatis 使用 Druid 数据库连接池,实现高效、安全的数据库连接池管理。 知识点 4: Druid 的优点 Druid 的优点有: * 高效:Druid 提供了高效的数据库连接池管理...

    Spring+mvc+mybatis Mapper xml自动加载

    &lt;property name="dataSource" ref="dataSource" /&gt; *.xml" /&gt; ``` 这里,`mapperLocations`指定了Mapper XML文件的位置,可以是类路径下的某个目录或具体的文件。 其次,MyBatis本身并不提供XML文件的热加载...

    dynamic-datasource.zip

    动态数据源(Dynamic DataSource)是Java开发中处理多数据源的一种技术,主要应用于需要同时连接多个数据库的应用场景。在大型企业级应用或者分布式系统中,根据业务需求将数据分散存储在多个数据库中是很常见的做法...

    java设置Sping的dataSource的参数信息

    通过以上介绍,我们可以看出,使用Java代码动态地设置Spring中的DataSource参数是一种非常实用的方法,尤其适合于需要频繁更改数据库配置的情况。同时,这种方法也很好地体现了面向服务的思想,使得程序更加灵活和可...

    初探spring aop内部实现 java

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一的管理和控制。本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    理解如何配置DataSource,以及如何使用JdbcTemplate进行增删改查操作是关键。 3. **用户登录**:登录功能通常涉及用户输入验证、凭证校验(例如,通过比较用户名和密码)以及会话管理。你需要了解如何在后端验证...

    使用spring环境常用jar

    在Spring项目中,通过DataSource配置,可以轻松地实现数据库的连接和操作。 以上就是标题“使用spring环境常用jar”所涉及的主要知识点。理解并熟练运用这些jar包,可以帮助开发者构建高效、稳定的Spring应用,同时...

    动力节点老杜Spring6,配套笔记PDF文件

    在Spring Boot应用中,可以通过配置文件(如`application.properties`或`application.yml`)轻松地更改数据源,如`spring.datasource.url`,`spring.datasource.username`等,避免代码修改。 通过以上分析,我们...

Global site tag (gtag.js) - Google Analytics