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 sqlProviders; private final DbType dbType; public DynamicDataSourceJdbcProvider(DynamicDataSourceProperties dynamicDataSourceProperties, String driverClassName, String url, String username, String password, List 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 executeStmt(Statement statement) throws SQLException { Map 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 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("不支持的数据源"); } }