package com.qianwen.core.tenant.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 java.sql.ResultSet;
|
import java.sql.SQLException;
|
import java.sql.Statement;
|
import java.util.HashMap;
|
import java.util.Map;
|
import com.qianwen.core.tenant.constant.TenantBaseConstant;
|
import com.qianwen.core.tool.utils.StringUtil;
|
|
|
public class TenantDataSourceJdbcProvider extends AbstractJdbcDataSourceProvider {
|
private final String driverClassName;
|
private final String url;
|
private final String username;
|
private final String password;
|
private final DynamicDataSourceProperties dynamicDataSourceProperties;
|
|
public TenantDataSourceJdbcProvider(DynamicDataSourceProperties dynamicDataSourceProperties, String driverClassName, String url, String username, String password) {
|
super(driverClassName, url, username, password);
|
this.dynamicDataSourceProperties = dynamicDataSourceProperties;
|
this.driverClassName = driverClassName;
|
this.url = url;
|
this.username = username;
|
this.password = password;
|
}
|
|
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);
|
masterProperty.setDruid(this.dynamicDataSourceProperties.getDruid());
|
map.put(this.dynamicDataSourceProperties.getPrimary(), masterProperty);
|
Map<String, DataSourceProperty> datasource = this.dynamicDataSourceProperties.getDatasource();
|
if (datasource.size() > 0) {
|
map.putAll(datasource);
|
}
|
ResultSet rs = statement.executeQuery(TenantBaseConstant.TENANT_DATASOURCE_GROUP_STATEMENT);
|
while (rs.next()) {
|
String tenantId = rs.getString("tenantId");
|
String driver = rs.getString("driverClass");
|
String url = rs.getString("url");
|
String username = rs.getString("username");
|
String password = rs.getString("password");
|
if (StringUtil.isNoneBlank(new CharSequence[]{tenantId, driver, url, username, password})) {
|
DataSourceProperty jdbcProperty = new DataSourceProperty();
|
jdbcProperty.setDriverClassName(driver);
|
jdbcProperty.setUrl(url);
|
jdbcProperty.setUsername(username);
|
jdbcProperty.setPassword(password);
|
jdbcProperty.setDruid(this.dynamicDataSourceProperties.getDruid());
|
map.put(tenantId, jdbcProperty);
|
}
|
}
|
return map;
|
}
|
}
|