package com.qianwen.smartman.modules.visual.dynamic;
|
|
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
|
import com.baomidou.dynamic.datasource.creator.DataSourceCreator;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
|
import java.util.Set;
|
import javax.sql.DataSource;
|
import com.qianwen.core.cache.utils.CacheUtil;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.tool.utils.StringUtil;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/visual/dynamic/DynamicDataSourceHolder.class */
|
public class DynamicDataSourceHolder {
|
private DataSource dataSource;
|
private DataSourceCreator dataSourceCreator;
|
private JdbcTemplate jdbcTemplate;
|
|
public void setDataSource(final DataSource dataSource) {
|
this.dataSource = dataSource;
|
}
|
|
public void setDataSourceCreator(final DataSourceCreator dataSourceCreator) {
|
this.dataSourceCreator = dataSourceCreator;
|
}
|
|
public void setJdbcTemplate(final JdbcTemplate jdbcTemplate) {
|
this.jdbcTemplate = jdbcTemplate;
|
}
|
|
public void handleDataSource(String id) {
|
DynamicRoutingDataSource ds = (DynamicRoutingDataSource)this.dataSource;
|
/*
|
DynamicRoutingDataSource ds = this.dataSource;*/
|
Set<String> keys = ds.getCurrentDataSources().keySet();
|
if (!keys.contains(id)) {
|
DynamicDataSource dynamicDataSource = getDataSource(id);
|
if (dynamicDataSource != null) {
|
DataSourceProperty dataSourceProperty = new DataSourceProperty();
|
BeanUtils.copyProperties(dynamicDataSource, dataSourceProperty);
|
DataSource dataSource = this.dataSourceCreator.createDataSource(dataSourceProperty);
|
ds.addDataSource(id, dataSource);
|
return;
|
}
|
throw new ServiceException(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_NOT_FOUND);
|
}
|
}
|
|
private DynamicDataSource getDataSource(String id) {
|
try {
|
DynamicDataSource dynamicDataSource = (DynamicDataSource) CacheUtil.get(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_CACHE, DynamicDataSourceConstant.DYNAMIC_DATASOURCE_KEY, id, DynamicDataSource.class, Boolean.FALSE);
|
if (dynamicDataSource == null) {
|
dynamicDataSource = (DynamicDataSource) this.jdbcTemplate.queryForObject(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_SINGLE_STATEMENT, new String[]{id}, new BeanPropertyRowMapper(DynamicDataSource.class));
|
if (dynamicDataSource != null && StringUtil.isNoneBlank(new CharSequence[]{dynamicDataSource.getId(), dynamicDataSource.getDriverClass(), dynamicDataSource.getUrl(), dynamicDataSource.getUsername(), dynamicDataSource.getPassword()})) {
|
CacheUtil.put(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_CACHE, DynamicDataSourceConstant.DYNAMIC_DATASOURCE_KEY, id, dynamicDataSource, Boolean.FALSE);
|
}
|
}
|
return dynamicDataSource;
|
} catch (Exception ex) {
|
ex.printStackTrace();
|
return null;
|
}
|
}
|
}
|