コード例 #1
0
  /**
   * 刷新数据源
   *
   * @param newConfig
   */
  private void reflush(DataSourceConfig newConfig) {
    // 本地配置优先
    overByLocal(newConfig);

    try {
      _ds_lock_.lock();
      if (null == config
          || (config.getDbStatus() == DBStatus.NA_STATUS
              && newConfig.getDbStatus() != DBStatus.NA_STATUS)) {
        // 创建数据源
        localTxDataSource =
            IDataSourceFactory.createLocalTxDataSource(
                dataSourceConfig2LocalTxDataSourceConfig(newConfig));
        logger.warn("Init datasource");
      } else if (config.getDbStatus() != DBStatus.NA_STATUS
          && newConfig.getDbStatus() == DBStatus.NA_STATUS) {
        // 销毁数据源
        destroy();
        logger.warn("Destroy datasource");
      } else {
        // 刷新
        if (isNeedFlush(config, newConfig)) {
          LocalTxDataSourceConfig c = dataSourceConfig2LocalTxDataSourceConfig(newConfig);
          localTxDataSource.setConnectionURL(c.getConnectionURL());
          localTxDataSource.setDriverClass(c.getDriverClassName());
          localTxDataSource.setExceptionSorterClassName(c.getExceptionSorterClassName());
          flush();
        }
      }

      config = newConfig;
      dbType = config.getDbType();
    } catch (Exception e) {
      logger.error(e);
    } finally {
      _ds_lock_.unlock();
    }
  }