PC
2024-03-31 8c9ba6667b89cc0494d05b5da4355dde205b8d4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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<CheckSqlProvider> sqlProviders;
 
    @Bean
    public DynamicDataSourceProvider dynamicDataSourceProvider(DataSourceProperties dataSourceProperties, DynamicDataSourceProperties dynamicDataSourceProperties, List<CheckSqlProvider> 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);
        }
    }
}