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 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); masterProperty.setDruid(this.dynamicDataSourceProperties.getDruid()); map.put(this.dynamicDataSourceProperties.getPrimary(), masterProperty); Map 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; } }