package com.qianwen.core.sequence.range.db.provider; import cn.hutool.core.util.StrUtil; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceCreatorAutoConfiguration; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; import java.util.List; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Import; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; @AutoConfigureBefore({DynamicDataSourceAutoConfiguration.class}) @EnableConfigurationProperties({DataSourceProperties.class, DynamicDataSourceProperties.class}) @Component @Import({DynamicDataSourceCreatorAutoConfiguration.class}) public class SqlProviderFactory { private DynamicDataSourceProperties dynamicDataSourceProperties; private DataSourceProperties dataSourceProperties; private List sqlProviders; private Environment environment; public SqlProviderFactory(final DynamicDataSourceProperties dynamicDataSourceProperties, final DataSourceProperties dataSourceProperties, final List sqlProviders, final Environment environment) { this.dynamicDataSourceProperties = dynamicDataSourceProperties; this.dataSourceProperties = dataSourceProperties; this.sqlProviders = sqlProviders; this.environment = environment; } public SqlProvider getSqlProvider() { DataSourceProperty master; String url = this.dataSourceProperties.getUrl(); if (StrUtil.isBlank(url) && (master = (DataSourceProperty) this.dynamicDataSourceProperties.getDatasource().get(this.dynamicDataSourceProperties.getPrimary())) != null) { url = master.getUrl(); } if (StrUtil.isBlank(url)) { url = this.environment.getProperty("spring.datasource.druid.url"); } DbType dbType = JdbcUtils.getDbType(url); for (SqlProvider sqlProvider : this.sqlProviders) { if (sqlProvider.support(dbType).booleanValue()) { return sqlProvider; } } throw new UnsupportedOperationException("不支持的数据源"); } public String getCreateTableSql() { SqlProvider sqlProvider = getSqlProvider(); return sqlProvider.getCreateTableSql(); } public String getInsertRangeSql() { SqlProvider sqlProvider = getSqlProvider(); return sqlProvider.getInsertRangeSql(); } public String getSelectRangeSql() { SqlProvider sqlProvider = getSqlProvider(); return sqlProvider.getSelectRangeSql(); } public String getUpdateRangeSql() { SqlProvider sqlProvider = getSqlProvider(); return sqlProvider.getUpdateRangeSql(); } public String getExistTableSql() { SqlProvider sqlProvider = getSqlProvider(); return sqlProvider.getExistTableSql(); } }