危化品全生命周期管理后端
heheng
2025-04-18 5b18c5a8c26194474b65b180c6e87e180a03c646
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package com.gkhy.hazmat.framework.config;
 
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
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;
 
@Configuration
public class DruidConfig {
 
    @Bean(name = "masterDataSource")
    @ConfigurationProperties("spring.datasource.druid.master")
    public DataSource masterDataSource(DruidProperties druidProperties){
        DruidDataSource dataSource= DruidDataSourceBuilder.create().build();
        return druidProperties.dataSource(dataSource);
    }
 
 
    @Bean(name = "slaveDataSource")
    @ConfigurationProperties("spring.datasource.druid.slave")
    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave",name="enabled",havingValue = "true")
    public DataSource slaveDataSource(DruidProperties druidProperties){
        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")
    @Primary
    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.SHARDING.name(), "shardingDataSource");
        return new DynamicDataSource(masterDataSource,targetDataSources);
    }
 
    /**
     * 设置数据源
     * @param targetDataSource 备选数据源集合
     * @param sourceName   数据源名称
     * @param beanName    bean名称
     */
    public void setDataSource(Map<Object,Object>targetDataSource,String sourceName,String beanName){
 
        try {
            DataSource dataSource = SpringUtil.getBean(beanName);
            targetDataSource.put(sourceName, dataSource);
        }catch (Exception e){
 
        }
    }
 
    /**
     * 去除监控页面底部的广告
     * @param properties
     * @return
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    @ConditionalOnProperty(name="spring.datasource.druid.statViewServlet.enabled",havingValue = "true")
    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties){
        DruidStatProperties.StatViewServlet config=properties.getStatViewServlet();
        String pattern=config.getUrlPattern()!=null?config.getUrlPattern():"/druid/*";
        String commonJsPattern=pattern.replaceAll("\\*","js/common.js");
        final String filePath="support/http/resources/js/common.js";
        Filter filter=new Filter() {
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                filterChain.doFilter(servletRequest,servletResponse);
                // 重置缓冲区,响应头不会被重置
                servletResponse.resetBuffer();
                // 获取common.js
                String text= Utils.readFromResource(filePath);
                text=text.replaceAll("<a.*?banner\"></a><br/>","");
                text=text.replaceAll("powered.*?shrek.wang</a>","");
                servletResponse.getWriter().write(text);
            }
        };
 
 
        FilterRegistrationBean registrationBean=new FilterRegistrationBean<>();
        registrationBean.setFilter(filter);
        registrationBean.addUrlPatterns(commonJsPattern);
        return registrationBean;
 
    }
}