package com.qianwen.smartman.modules.visual.dynamic;
|
|
import com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
|
import java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.sql.Statement;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import com.qianwen.core.tool.utils.StringUtil;
|
import com.qianwen.smartman.modules.auth.granter.PasswordTokenGranter;
|
import com.qianwen.smartman.modules.visual.dynamic.provider.CheckSqlProvider;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/visual/dynamic/DynamicDataSourceJdbcProvider.class */
|
public class DynamicDataSourceJdbcProvider extends AbstractJdbcDataSourceProvider {
|
private final String driverClassName;
|
private final String url;
|
private final String username;
|
private final String password;
|
private final DynamicDataSourceProperties dynamicDataSourceProperties;
|
private final List<CheckSqlProvider> sqlProviders;
|
private final DbType dbType;
|
|
public DynamicDataSourceJdbcProvider(DynamicDataSourceProperties dynamicDataSourceProperties, String driverClassName, String url, String username, String password, List<CheckSqlProvider> sqlProviders) {
|
super(driverClassName, url, username, password);
|
this.dynamicDataSourceProperties = dynamicDataSourceProperties;
|
this.driverClassName = driverClassName;
|
this.url = url;
|
this.username = username;
|
this.password = password;
|
this.sqlProviders = sqlProviders;
|
this.dbType = JdbcUtils.getDbType(url);
|
}
|
|
protected Map<String, DataSourceProperty> executeStmt(Statement statement) throws SQLException {
|
Map<String, DataSourceProperty> map = new HashMap<>(16);
|
DataSourceProperty masterProperty = new DataSourceProperty();
|
masterProperty.setDriverClassName(this.driverClassName);
|
masterProperty.setUrl(this.url);
|
masterProperty.setUsername(this.username);
|
masterProperty.setPassword(this.password);
|
map.put(this.dynamicDataSourceProperties.getPrimary(), masterProperty);
|
Map<String, DataSourceProperty> datasource = this.dynamicDataSourceProperties.getDatasource();
|
if (datasource.size() > 0) {
|
map.putAll(datasource);
|
}
|
CheckSqlProvider checkSqlProvider = getSqlProvider();
|
ResultSet tableResult = statement.executeQuery(StringUtil.format(checkSqlProvider.getExistTableSql(), new Object[]{checkSqlProvider.getDatabaseSchema(statement)}));
|
while (tableResult.next()) {
|
int tableExist = tableResult.getInt(1);
|
if (tableExist == 0) {
|
return map;
|
}
|
}
|
ResultSet rs = statement.executeQuery(DynamicDataSourceConstant.DYNAMIC_DATASOURCE_GROUP_STATEMENT);
|
while (rs.next()) {
|
String id = rs.getString("id");
|
String driver = rs.getString("driverClass");
|
String url = rs.getString("url");
|
String username = rs.getString("username");
|
String password = rs.getString(PasswordTokenGranter.GRANT_TYPE);
|
if (StringUtil.isNoneBlank(new CharSequence[]{id, driver, url, username, password})) {
|
DataSourceProperty jdbcProperty = new DataSourceProperty();
|
jdbcProperty.setDriverClassName(driver);
|
jdbcProperty.setUrl(url);
|
jdbcProperty.setUsername(username);
|
jdbcProperty.setPassword(password);
|
map.put(id, jdbcProperty);
|
}
|
}
|
return map;
|
}
|
|
public CheckSqlProvider getSqlProvider() {
|
for (CheckSqlProvider sqlProvider : this.sqlProviders) {
|
if (sqlProvider.support(this.dbType).booleanValue()) {
|
return sqlProvider;
|
}
|
}
|
throw new UnsupportedOperationException("不支持的数据源");
|
}
|
}
|