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 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;
|
|
}
|
}
|