From 3bff8586431fa885b793ea5a02d9fd2becabe1a7 Mon Sep 17 00:00:00 2001 From: HashMap Date: Tue, 27 Jan 2026 13:15:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(sys=20|=20login):=20=E5=A4=9A=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E6=A8=A1=E5=BC=8F=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + 两个业务通过用户ID分配数据源 --- .../Filter/DataSourceRoutingFilter.java | 10 +++- .../src/main/resources/application-druid.yml | 4 ++ .../zhyc/framework/config/DruidConfig.java | 60 +++++++++---------- 3 files changed, 41 insertions(+), 33 deletions(-) diff --git a/zhyc-admin/src/main/java/com/zhyc/Routing/Filter/DataSourceRoutingFilter.java b/zhyc-admin/src/main/java/com/zhyc/Routing/Filter/DataSourceRoutingFilter.java index 1534502..8fdf766 100644 --- a/zhyc-admin/src/main/java/com/zhyc/Routing/Filter/DataSourceRoutingFilter.java +++ b/zhyc-admin/src/main/java/com/zhyc/Routing/Filter/DataSourceRoutingFilter.java @@ -3,6 +3,7 @@ package com.zhyc.Routing.Filter; import com.zhyc.framework.config.routing.DataSourceKeys; import com.zhyc.framework.datasource.DynamicDataSourceContextHolder; import lombok.extern.slf4j.Slf4j; +import org.bytedeco.opencv.presets.opencv_core; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; @@ -22,13 +23,18 @@ public class DataSourceRoutingFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String uri = request.getRequestURI(); - + String username = request.getRemoteUser(); + log.debug("username:{}",username); try { if (uri.startsWith("/app") || uri.startsWith("/base") || uri.startsWith("/biosafety") || uri.startsWith("/common") || uri.startsWith("/dairyProducts") || uri.startsWith("/enums") || uri.startsWith("/feed") || uri.startsWith("/frozen") || uri.startsWith("/produce") || uri.startsWith("sale") || uri.startsWith("/stock") || uri.startsWith("/work") || uri.startsWith("/sheepfold_management")) { log.debug("业务请求 : BUSINESS : {}", uri); - DynamicDataSourceContextHolder.setDataSourceType(DataSourceKeys.FARM_1); + if (username.equals("admin")) { + DynamicDataSourceContextHolder.setDataSourceType(DataSourceKeys.FARM_1); + }else if (username.equals("ry")) { + DynamicDataSourceContextHolder.setDataSourceType(DataSourceKeys.FARM_2); + } } else { log.debug("系统请求 : SYSTEM : {}", uri); DynamicDataSourceContextHolder.setDataSourceType(DataSourceKeys.SYSTEM); diff --git a/zhyc-admin/src/main/resources/application-druid.yml b/zhyc-admin/src/main/resources/application-druid.yml index 5b9cfd9..8177554 100644 --- a/zhyc-admin/src/main/resources/application-druid.yml +++ b/zhyc-admin/src/main/resources/application-druid.yml @@ -18,6 +18,10 @@ spring: url: jdbc:mysql://118.182.97.76:3306/zhyc_sheep01?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: zhyc password: yszh123 + farm02: + url: jdbc:mysql://118.182.97.76:3306/zhyc_sheep02?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: zhyc + password: yszh123 # 初始连接数 initialSize: 5 # 最小连接池数量 diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/config/DruidConfig.java b/zhyc-framework/src/main/java/com/zhyc/framework/config/DruidConfig.java index fc1785c..ce691ad 100644 --- a/zhyc-framework/src/main/java/com/zhyc/framework/config/DruidConfig.java +++ b/zhyc-framework/src/main/java/com/zhyc/framework/config/DruidConfig.java @@ -27,19 +27,18 @@ import com.zhyc.framework.datasource.DynamicDataSource; /** * druid 配置多数据源 - * + * * @author ruoyi */ @Configuration -public class DruidConfig -{ +public class DruidConfig { @Bean @ConfigurationProperties("spring.datasource.druid.master") - public DataSource masterDataSource(DruidProperties druidProperties) - { + public DataSource masterDataSource(DruidProperties druidProperties) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); return druidProperties.dataSource(dataSource); } + @Bean @ConfigurationProperties("spring.datasource.druid.farm01") public DataSource farm1DataSource(DruidProperties druidProperties) { @@ -47,13 +46,17 @@ public class DruidConfig return druidProperties.dataSource(dataSource); } - + @Bean + @ConfigurationProperties("spring.datasource.druid.farm02") + public DataSource farm2DataSource(DruidProperties 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(DruidProperties druidProperties) - { + public DataSource slaveDataSource(DruidProperties druidProperties) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); return druidProperties.dataSource(dataSource); } @@ -62,43 +65,40 @@ public class DruidConfig @Primary public DataSource dynamicDataSource( @Qualifier("masterDataSource") DataSource systemDataSource, - @Qualifier("farm1DataSource") DataSource farm1DataSource) { + @Qualifier("farm1DataSource") DataSource farm1DataSource, + @Qualifier("farm2DataSource") DataSource farm2DataSource) { // 存储数据源路由 Map targetDataSources = new HashMap<>(); targetDataSources.put("system", systemDataSource); targetDataSources.put("farm01", farm1DataSource); + targetDataSources.put("farm02", farm2DataSource); return new DynamicDataSource(systemDataSource, targetDataSources); } - + /** * 设置数据源 - * + * * @param targetDataSources 备选数据源集合 - * @param sourceName 数据源名称 - * @param beanName bean名称 + * @param sourceName 数据源名称 + * @param beanName bean名称 */ - public void setDataSource(Map targetDataSources, String sourceName, String beanName) - { - try - { + public void setDataSource(Map targetDataSources, String sourceName, String beanName) { + try { DataSource dataSource = SpringUtils.getBean(beanName); targetDataSources.put(sourceName, dataSource); - } - catch (Exception e) - { + } catch (Exception e) { } } /** * 去除监控页面底部的广告 */ - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"rawtypes", "unchecked"}) @Bean @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true") - public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) - { + public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) { // 获取web监控页面的参数 DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); // 提取common.js的配置路径 @@ -106,16 +106,14 @@ public class DruidConfig String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); final String filePath = "support/http/resources/js/common.js"; // 创建filter进行过滤 - Filter filter = new Filter() - { + Filter filter = new Filter() { @Override - public void init(javax.servlet.FilterConfig filterConfig) throws ServletException - { + public void init(javax.servlet.FilterConfig filterConfig) throws ServletException { } + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException - { + throws IOException, ServletException { chain.doFilter(request, response); // 重置缓冲区,响应头不会被重置 response.resetBuffer(); @@ -126,9 +124,9 @@ public class DruidConfig text = text.replaceAll("powered.*?shrek.wang", ""); response.getWriter().write(text); } + @Override - public void destroy() - { + public void destroy() { } }; FilterRegistrationBean registrationBean = new FilterRegistrationBean();