危化品全生命周期管理后端
heheng
2025-04-18 5b18c5a8c26194474b65b180c6e87e180a03c646
hazmat-framework/src/main/java/com/gkhy/hazmat/framework/config/DruidConfig.java
@@ -7,16 +7,23 @@
import com.alibaba.druid.util.Utils;
import com.gkhy.hazmat.common.enums.DataSourceType;
import com.gkhy.hazmat.framework.config.properties.DruidProperties;
import com.gkhy.hazmat.framework.config.properties.ShardingProperties;
import org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import javax.servlet.*;
import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
@@ -38,7 +45,16 @@
        DruidDataSource dataSource=DruidDataSourceBuilder.create().build();
        return druidProperties.dataSource(dataSource);
    }
    @Bean
    public DataSource shardingDataSource(ShardingProperties shardingProperties) throws Exception
    {
        ClassPathResource classPathResource = new ClassPathResource(shardingProperties.getConfigLocation());
        InputStream inputStream = classPathResource.getInputStream();
        File tmpFile = File.createTempFile(shardingProperties.getConfigLocation(), ".tmp");
        Files.copy(inputStream, tmpFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
        DataSource dataSource = YamlShardingSphereDataSourceFactory.createDataSource(tmpFile);
        return dataSource;
    }
    @Bean(name="dynamicDataSource")
@@ -46,7 +62,8 @@
    public DynamicDataSource dataSource(DataSource masterDataSource){
        Map<Object,Object> targetDataSources=new HashMap<>();
        targetDataSources.put(DataSourceType.MASTER.name(),masterDataSource);
        setDataSource(targetDataSources,DataSourceType.SLAVE.name(),"slaveDataSource");
//        setDataSource(targetDataSources,DataSourceType.SLAVE.name(),"slaveDataSource");
        setDataSource(targetDataSources, DataSourceType.SHARDING.name(), "shardingDataSource");
        return new DynamicDataSource(masterDataSource,targetDataSources);
    }