/** * 刷新数据源 * * @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(); } }