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 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(MaptargetDataSource,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("
",""); text=text.replaceAll("powered.*?shrek.wang",""); servletResponse.getWriter().write(text); } }; FilterRegistrationBean registrationBean=new FilterRegistrationBean<>(); registrationBean.setFilter(filter); registrationBean.addUrlPatterns(commonJsPattern); return registrationBean; } }