add
heheng
2025-06-10 942bdeee0b6fcc92b35e788c851d39c5182a8e40
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
package com.gkhy.exam.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.exam.common.enums.DataSourceType;
import com.gkhy.exam.framework.config.properties.DruidProperties;
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 javax.servlet.*;
import javax.sql.DataSource;
import java.io.IOException;
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(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");
        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;
 
    }
}