使用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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值