From 2b4f0b0109238728fffdc7d58ef79210eef9552e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A9=86-=E4=B8=8A=E5=96=84=E8=8B=A5=E6=B0=B4?= <282263179@qq.com> Date: Fri, 30 Oct 2020 14:20:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9SpringUtil=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96slaveDataSource=20bean=E5=AF=BC=E8=87=B4=20da?= =?UTF-8?q?tasource=20switch=20exception=20=20=20=20=20@Bean(name=20=3D=20?= =?UTF-8?q?"dynamicDataSource")=20=20=20=20=20@Primary=20=20=20=20=20publi?= =?UTF-8?q?c=20DynamicDataSource=20dataSource(DataSource=20masterDataSourc?= =?UTF-8?q?e,DataSource=20slaveDataSource)=20=20=20=20=20{=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20Map=20targetDataSources=20=3D=20n?= =?UTF-8?q?ew=20HashMap<>();=20=20=20=20=20=20=20=20=20targetDataSources.p?= =?UTF-8?q?ut(DataSourceType.MASTER.name(),=20masterDataSource);=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20targetDataSources.put(DataSourceType.SLAVE.na?= =?UTF-8?q?me(),slaveDataSource);=20=20=20=20=20=20=20=20=20return=20new?= =?UTF-8?q?=20DynamicDataSource(masterDataSource,=20targetDataSources);=20?= =?UTF-8?q?=20=20=20=20}?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DruidConfig.java | 114 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 DruidConfig.java diff --git a/DruidConfig.java b/DruidConfig.java new file mode 100644 index 00000000..14d13b17 --- /dev/null +++ b/DruidConfig.java @@ -0,0 +1,114 @@ +package com.pearadmin.common.config; + +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.pearadmin.common.config.proprety.DruidProperty; +import com.pearadmin.common.plugins.datasource.DynamicDataSource; +import com.pearadmin.common.plugins.datasource.enums.DataSourceType; +import com.pearadmin.common.tools.spring.SpringUtil; +import lombok.extern.slf4j.Slf4j; +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; + +/** + * Describe: 数 据 源 配 置 类 + * Author: 就 眠 仪 式 + * CreateTime: 2019/10/23 + * */ +@Slf4j +@Configuration +public class DruidConfig { + + /** + * 主数据源 + * */ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource(DruidProperty druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + /** + * 从数据源 + * */ + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource(DruidProperty druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + /** + * 动态数据源 + * */ + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource,DataSource slaveDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + targetDataSources.put(DataSourceType.SLAVE.name(),slaveDataSource); + return new DynamicDataSource(masterDataSource, targetDataSources); + } + + + /** + * 去除监控页面底部的广告 + * + * @param properties 备选数据源集合 + */ + @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 init(javax.servlet.FilterConfig filterConfig) throws ServletException + { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + chain.doFilter(request, response); + response.resetBuffer(); + String text = Utils.readFromResource(filePath); + text = text.replaceAll("
", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + + @Override + public void destroy() + { + + } + }; + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } +} -- Gitee