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<SqlProvider> sqlProviders;
|
private Environment environment;
|
|
public SqlProviderFactory(final DynamicDataSourceProperties dynamicDataSourceProperties, final DataSourceProperties dataSourceProperties, final List<SqlProvider> 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();
|
}
|
}
|