package com.qianwen.smartman.modules.visual.dynamic; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator; import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider; 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 java.util.List; import javax.sql.DataSource; import com.qianwen.core.tenant.config.TenantDataSourceConfiguration; import com.qianwen.smartman.modules.visual.dynamic.provider.CheckSqlProvider; import org.springframework.beans.factory.SmartInitializingSingleton; 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.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.core.annotation.Order; import org.springframework.jdbc.core.JdbcTemplate; @AutoConfigureBefore({TenantDataSourceConfiguration.class, DruidDataSourceAutoConfigure.class, DynamicDataSourceAutoConfiguration.class}) @EnableConfigurationProperties({DataSourceProperties.class, DynamicDataSourceProperties.class}) @Configuration(proxyBeanMethods = false) @Import({DynamicDataSourceCreatorAutoConfiguration.class}) /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/visual/dynamic/DynamicDataSourceConfiguration.class */ public class DynamicDataSourceConfiguration { private List sqlProviders; @Bean public DynamicDataSourceProvider dynamicDataSourceProvider(DataSourceProperties dataSourceProperties, DynamicDataSourceProperties dynamicDataSourceProperties, List sqlProviders) { String driverClassName = dataSourceProperties.getDriverClassName(); String url = dataSourceProperties.getUrl(); String username = dataSourceProperties.getUsername(); String password = dataSourceProperties.getPassword(); DataSourceProperty master = (DataSourceProperty) dynamicDataSourceProperties.getDatasource().get(dynamicDataSourceProperties.getPrimary()); if (master != null) { driverClassName = master.getDriverClassName(); url = master.getUrl(); username = master.getUsername(); password = master.getPassword(); } return new DynamicDataSourceJdbcProvider(dynamicDataSourceProperties, driverClassName, url, username, password, sqlProviders); } @Bean public DataSource dataSource(DynamicDataSourceProvider dynamicDataSourceProvider, DynamicDataSourceProperties dynamicDataSourceProperties) { DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource(); dataSource.setPrimary(dynamicDataSourceProperties.getPrimary()); dataSource.setStrict(dynamicDataSourceProperties.getStrict()); dataSource.setStrategy(dynamicDataSourceProperties.getStrategy()); dataSource.setProvider(dynamicDataSourceProvider); dataSource.setP6spy(dynamicDataSourceProperties.getP6spy()); dataSource.setSeata(dynamicDataSourceProperties.getSeata()); return dataSource; } @Bean public DynamicDataSourceHolder dataSourceHolder() { return new DynamicDataSourceHolder(); } @Configuration(proxyBeanMethods = false) @Order /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/visual/dynamic/DynamicDataSourceConfiguration$DataSourceHolderConfiguration.class */ public static class DataSourceHolderConfiguration implements SmartInitializingSingleton { private final DataSource dataSource; private final DruidDataSourceCreator dataSourceCreator; private final JdbcTemplate jdbcTemplate; private final DynamicDataSourceHolder dynamicDataSourceHolder; public DataSourceHolderConfiguration(final DataSource dataSource, final DruidDataSourceCreator dataSourceCreator, final JdbcTemplate jdbcTemplate, final DynamicDataSourceHolder dynamicDataSourceHolder) { this.dataSource = dataSource; this.dataSourceCreator = dataSourceCreator; this.jdbcTemplate = jdbcTemplate; this.dynamicDataSourceHolder = dynamicDataSourceHolder; } public void afterSingletonsInstantiated() { this.dynamicDataSourceHolder.setDataSource(this.dataSource); this.dynamicDataSourceHolder.setDataSourceCreator(this.dataSourceCreator); this.dynamicDataSourceHolder.setJdbcTemplate(this.jdbcTemplate); } } }